prototype: 任何函数(箭头函数除外)都具有一个 prototype属性,该属性是一个对象。一般情况下只有声明function的变量才会有(自动生成)prototype这个属性,而function通过在它的名字前加new 可以创建出属于它的实例。是函数所独有的。

__proto__: 引用类型的__proto__属性是浏览器给他们添加的一个自定义属性,属性值也是一个普通对象。引用类型的__proto__属性指向它们的构造函数的prototype属性。对象所独有的。

constructor: 是一个构造函数,是一种特殊的method。在生成prototype时自动生成的属性,其指向函数本身(在申明函数时,js自动创建该函数的peototype属性)。在用new给一个类创建对象的时候会自动调用该类的构造函数。对象所独有的。

let fn = function() {}
let fn2 = new fn()

关系图解:

prototype

任何函数(箭头函数除外)都具有一个 prototype属性

__proto__

一个对象的__proto__指向产生它的类的prototype。function声明的变量的__proto__指向Function的prototype,其它对象的__proto__指向Object的prototype。每个函数的prototype是一个对象,prototype的__proto__指向一定是Object.prototype。

特殊的Function跟Object

Function:

从控制台分别打印Function的prototype跟__proto__,可以明显的看出来Function的__proto__指向了自己的prototype。

Object:

如上图,Object与Function的__proto__的指向是相同的,都是指向了Function的prototype。

如上图,Object的proptotype又有些不同,没有灰色的<prototype>,在控制台中也可以清楚的看到Object的__proto__指向了null,也可以讲Object.prototype看作为一切之源。

Object的prototype称为源型,将图逆推,

所有通过这个源型创造出的都是object,第一步先创造出Function的prototype,因此这个prototype的__proto__指向源型,然后再通过这个prototype造出Function,因此Function的__proto__指向它自己的prototype,然后用Function造出Object,因此Object的__proto__指向Function的prototype。

peototype是原型,__proto__所指向的以及其后的所有peototype称为原型链。

constructor

对象独有的,它是从一个对象指向一个函数,含义就是指向该对象的构造函数。

根据上文逆推的结论:所有函数和对象最终都是由Function构造函数得来,所以constructor属性的终点就是Function这个函数。

当一个对象不具备constructor时会沿着__proto__到原型链中去找。

总结

感谢两篇博文,内容主要参考博文:https://blog.csdn.net/cc18868876837/article/details/81211729#4_constructor_20https://blog.csdn.net/backee/article/details/83378772

最新文章

  1. js 查找树节点 数组去重
  2. C# Attribute学习
  3. CCNA第三章子网划分,变长子网掩码(VLSM)和TCP/IP排错考试要点学习笔记
  4. Java基础语法总结1
  5. 网站导航不止有hao123!
  6. MySQL之Join
  7. display:block; 块级元素。&lt;a&gt;,&lt;span&gt;标签设置宽度和高度
  8. javascript编辑器预览模式解密
  9. C++结构体:默认构造函数,复制构造函数,重载=运算符
  10. 【开发技术】Xcode3与xcode4.2模板对比(Xcode4.2开发之一些变化)
  11. docker入门(二)容器与镜像的理解
  12. c语言程序设计第四次作业——顺序结构
  13. P2678 跳石头---(二分答案)
  14. Python编程练习:使用 turtle 库完成六边形的绘制
  15. VS2013+Win10+opencv3.0配置(包括opencv2.4.10版本)
  16. 连接池(Connection Pool)技术
  17. VB6 让程序结束后带有返回值
  18. zoj4016 Mergeable Stack
  19. python 中的 %s,%r,__str__,__repr__
  20. 一款纯css3实现的鼠标经过按钮特效

热门文章

  1. 1.4 Go语言基础之流程控制
  2. MySQL有四种BLOB类型
  3. DisplayUtils
  4. JavaScript中&quot;Uncaught TypeError: Cannot set property &#39;innerHTML&#39; of null&quot;错误
  5. CentOS 7系统配置上的变化
  6. openstack核心组件--cinder存储服务(6)
  7. Django 虚拟化环境创建
  8. 【转】C# DataTable 导出 Excel 进阶 多行表头、合并单元格、中文文件名乱码
  9. 【VS开发】【DSP开发】WinDriver简介(或介绍)
  10. win7/xp解除系统限制的网速