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 相关文章推荐
javascript之更有效率的字符串替换
Aug 02 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
Javascript将string类型转换int类型
Dec 09 Javascript
Js sort排序使用方法
Oct 17 Javascript
简单的JS时钟实例讲解
Jan 13 Javascript
理解JS绑定事件
Jan 19 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
将JSON字符串转换成Map对象的方法
Nov 30 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
Mar 09 Javascript
深入浅析Vue中的slots/scoped slots
Apr 03 Javascript
js 判断当前时间是否处于某个一个时间段内
Sep 19 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
学习php中的正则表达式
2014/08/17 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
php-msf源码详解
2017/12/25 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
PHP7新特性
2021/03/09 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
解javascript 混淆加密收藏
2009/01/16 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
javascript操作数组详解
2014/12/17 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python生成n个元素的全组合方法
2018/11/13 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
Shell如何接收变量输入
2012/09/24 面试题
办公室助理岗位职责
2013/12/25 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL