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 相关文章推荐
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
动态载入js提高网页打开速度的方法
Jul 04 Javascript
javascript创建对象的几种模式介绍
May 06 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
jquery 中toggle的2种用法详解(推荐)
Sep 02 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
Dec 27 Javascript
Vue表单demo v-model双向绑定问题
Jun 29 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
js制作提示框插件
Dec 24 Javascript
webpack的移动端适配方案小结
Jul 25 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过滤危险html代码的函数
2008/07/22 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
Python3基础之基本运算符概述
2014/08/13 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python内建数据结构详解
2016/02/03 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
Windows下python3.7安装教程
2018/07/31 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
幼儿园长自我鉴定
2013/10/17 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
2019大学生实习报告
2019/06/21 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android
Moment的feature导致线上bug解决分析
2022/09/23 Javascript