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 相关文章推荐
js left,right,mid函数
Jun 10 Javascript
jquery与prototype框架的详细对比
Nov 21 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
JavaScript SHA-256加密算法详细代码
Oct 06 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
Oct 25 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
Sep 18 Javascript
layui的面包屑或者表单不显示的解决方法
Sep 05 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
node.js中事件触发器events的使用方法实例分析
Nov 23 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
帮你彻底搞懂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对数组排序的简单实例
2013/12/25 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
vue使用自定义icon图标的方法
2018/05/14 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
法警的竞聘演讲稿
2014/01/02 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
Python面向对象编程之类的概念
2021/11/01 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android