先画上一个关系图:

1. 什么是prototype、__proto__、constructor?

var arr = new Array;

1. __proto__是原型属性,对象特有的属性,是对象指向另外一个对象(就是第二点的原型对象),一般是实例对象的属性,如arr.__proto__

2. prototype是原型对象,构造函数特有的属性,是构造函数指向的对象,如Array.prototype

  其中:

arr.__proto__ === Array.prototype; //true

3. constructor是原型对象用于指回构造函数的属性,是对象指向函数的,如Array.prototype.constructor

2. 他们的作用?

1. 原型属性__proto__的作用是为了实例对象能够使用构造函数继承下来的属性和方法。通俗点说就是

  当前对象找不到的属性会去通过__proto__去构造函数的原型对象找,直到找到null。这就是原型链!

2. 原型对象prototype是构造函数特有的属性(原型对象也是对象!),是为了让构造函数所实例化的对象们可以找到公用的属性和方法。

  可以想象prototype是用来存放:爸爸(构造函数)给儿子们(实例对象们)留下的家产,

  儿子们都可以通过__proto__(想象成钥匙)访问到prototype(存放家产的箱子),从而使用从爸爸那继承的属性和方法

3. constructor就像是原型对象prototype的身份证,可以找到构造函数,这是prototype特有的。

3. 他们之间一些复杂的关系:

1.  arr.constructor === Array;

  实例对象arr本身并没有constructor属性,这是原型对象特有的属性嘛

  但是arr可以访问到他爸爸(构造函数)的原型对象呀!通过__proto__就可以访问到了Array.prototype了呀

  所以 arr.constructor 实际上是 arr.__proto__.constructor

2. 刚刚说了__proto__是对象指向另外一个原型对象,而函数实际上就是对象,所以构造函数也会有__proto__(这个在图上没有写)

Array.__proto__ === Function.prototype; //true
console.log(Array.__proto__);//ƒ () { [native code] }

 注意:函数的__proto__一律都指向Function.prototype,即构造函数都默认为Function的儿子,而Function的__proto__也是指向自己的prototype

Function.__proto__ === Function.prototype;// true

参考文章:https://blog.csdn.net/cc18868876837/article/details/81211729

最新文章

  1. tab
  2. IOS调用系统声音(键盘声音)
  3. jQuery的document ready与 onload事件——你真的思考过吗?
  4. sql 查询最近30分钟或者自定义时间数据
  5. unity4.6学习Ugui中文文档-------参考-UGUI Rect Transform
  6. 配置drbd高可用集群
  7. Altium Designer快捷键 【worldsing笔记】
  8. JAXB - The Object Factory
  9. Supervisord管理
  10. Link all references for a local rename (does not change references in other files)
  11. C#编写Windows 服务
  12. Linux:ftp服务本地用户,虚拟用户配置
  13. python 之路 day5 - 常用模块
  14. django filter or 多条件查询
  15. Hanlp分词1.7版本在Spark中分布式使用记录
  16. 【Java】 剑指offer(53-3) 数组中数值和下标相等的元素
  17. Centos7 LNMP 一键安装
  18. python安装opencv
  19. 使用mybatisgenerator 辅助工具逆向工程
  20. 使用livereload实现自动刷新

热门文章

  1. 【题解】[USACO07OPEN]Dining G
  2. Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
  3. WGS-84 to Web mercator
  4. “3D引擎和图形学技术点思路讲解”线上直播培训班报名开始啦(完全免费)
  5. pytest文档50-命令行参数--durations统计用例运行时间
  6. lumen单元测试
  7. C# 微支付退款查询接口 V3.3.6
  8. jq ajax封装
  9. 全球首个优秀的华人.net微服务框架 作者:百大僧
  10. 【API进阶之路】研发需求突增3倍,测试团队集体闹离职