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 相关文章推荐
让ie6也支持websocket采用flash封装实现
Feb 18 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
Jul 08 Javascript
JS 按钮点击触发(兼容IE、火狐)
Aug 07 Javascript
DOM基础教程之事件对象
Jan 20 Javascript
谈谈JavaScript中的几种借用方法
Aug 09 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
Dec 02 Javascript
javascript使用递归算法求两个数字组合功能示例
Jan 03 Javascript
js实现导航吸顶效果
Feb 24 Javascript
vue2.0实现导航菜单切换效果
May 08 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
Jul 11 Javascript
vue项目打包后怎样优雅的解决跨域
May 26 Javascript
JS实现transform实现扇子效果
Jan 17 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
用PHP制作的意见反馈表源码
2007/03/11 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
js 字符串操作函数
2009/07/25 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
python 解决函数返回return的问题
2020/12/05 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
企业文明单位申报材料
2014/05/16 职场文书
运动会报道稿300字
2014/10/02 职场文书
企业介绍信范文
2015/01/30 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android