① __proto__ 和 constructor 属性是 对象 所独有的。
② prototype 属性是 函数 所独有的。
** JS里函数也是引用类型的对象,所以函数也有 __proto__ 和 constructor 属性
__proto__ 和 原型链
(1)__proto__ 属性都是由一个对象指向一个对象,即指向它们的 原型对象。
(2)__proto__ 属性存在的作用:当访问一个对象属性A时,如果当前对象自身内部没有这个属性,就会上溯到__proto__ 属性所指的对象(原型对象 / 父级对象),如果父级对象自身也不存在这个属性,则上溯到父级对象的 __proto__ 属性所指的对象,一直上溯到原型链顶端 null, 最终没找到 属性A时,则返回 undefined
(3)通过 __proto__ 属性来连接对象直到 null 的一条链即是原型链
prototype
(1)prototype 属性都是由一个函数A指向一个对象,即函数A的原型对象(父级对象), 这个原型对象也是 由该函数A所创建的(实例化)对象的原型对象
( new funA() ).__proto__ === funA.prototype
(2)prototype 属性存在的作用:该属性可以包含所有实例对象共享的属性和方法。( 这里的实例对象是又该函数所实例化的)
constructor
(2)constructor 属性都是由:一个对象指向一个函数。指向该函数的构造函数。每个对象都有构造函数,Function这个函数构造函数是它本身。所有函数和对象最终都是由Function构造函数得来,所以 constructor 属性的终点就是Function这个函数。
继承
继承是指一个对象直接使用另外一个对象的属性和方法。
参考连接:https://chen-cong.blog.csdn.net/article/details/81211729