js prototype和__proto__的关系是什么


Posted in Javascript onAugust 23, 2019

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。(这个对象下面有个属性,这个属性是另外一个对象的应用 ,这个属性就是一个对象。)

function是对象,function的原型prototype也是对象,它们都会具有对象共有的特点。即:对象具有属性__proto__,每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这样 一直找下去,也就是我们平时所说的原型链的概念。__proto__可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。

funcition这个特殊的对象,除了和其他对象一样有上述_proto_属性之外,还有自己特有的属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。prototype是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。

ptototype和__proto__联系

prototype和__proto__都指向原型对象,任意一个函数(包括构造函数)都有一个prototype属性,指向该函数的原型对象,同样任意一个构造函数实例化的对象,都有一个__proto__属性(__proto__并非标准属性,ECMA-262第5版将该属性或指针称为[[Prototype]],可通过Object.getPrototypeOf()标准方法访问该属性),指向构造函数的原型对象。---sinのstone

ptototype和__proto__区别

//a作为构造函数时的prototype属性与a作为普通函数时的__proto__属性并不相等
console.log(a.prototype == a.__proto__);//false

console.log(a.__proto__);     //function (){}
console.log(a.__proto__ == Function.prototype);//true

//a作为一个普通函数调用时,它的构造函数是内置对象Function,所以它指向的原型对象,就是Function.prototype.
//其实这个和console.log(b.__proto__ == a.prototype)是一样的道理

//a作为构造函数时,它的原型,和它的原型的原型
console.log(a.prototype);          //a{}
console.log(a.prototype.__proto__); //Object{}

//a作为普通函数时,它原型的原型
console.log(a.__proto__.__proto__); //Object{}

console.log(a.__proto__.__proto__ == a.prototype.__proto__); //true

所有对象都有__proto__属性,函数这个特殊对象除了具有__proto__属性,还有特有的原型属性prototype。prototype对象默认有两个属性,constructor属性和__proto__属性。prototype属性可以给函数和对象添加可共享(继承)的方法、属性,而__proto__是查找某函数或对象的原型链方式。constructor,这个属性包含了一个指针,指回原构造函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
优化网页之快速的呈现我们的网页
Jun 29 Javascript
计算世界完全对称日的js代码,粗糙版
Nov 04 Javascript
jQuery功能函数详解
Feb 01 Javascript
详解JavaScript 中的 replace 方法
Jan 01 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
Mar 07 Javascript
浅谈javascript alert和confirm的美化
Dec 15 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
vux uploader 图片上传组件的安装使用方法
May 15 Javascript
elementUI 设置input的只读或禁用的方法
Oct 30 Javascript
微信小程序实现滑动翻页效果(完整代码)
Dec 06 Javascript
微信小程序中target和currentTarget的区别小结
Nov 06 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
Aug 23 #Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
Aug 23 #Javascript
微信小程序swiper禁止用户手动滑动代码实例
Aug 23 #Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
Aug 23 #Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
Aug 23 #Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
Aug 23 #Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 #Javascript
You might like
html中select语句读取mysql表中内容
2006/10/09 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
jQuery 动画基础教程
2008/12/25 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Django 开发环境配置过程详解
2019/07/18 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
项目开发计划书
2014/01/09 职场文书
魅力教师事迹材料
2014/01/10 职场文书
小学生操行评语大全
2014/04/22 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
廉政承诺书范文
2015/04/28 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python