https://blog.csdn.net/cc18868876837/article/details/81211729
![](https://img.haomeiwen.com/i7343547/4b6c3538a179285c.png)
![](https://img.haomeiwen.com/i7343547/aebbc877cac6eb55.png)
![](https://img.haomeiwen.com/i7343547/eddd38ff13e6424e.png)
__ proto __ 、contructor、prototype
对象独有:__ proto __ 、contructor
函数独有:prototype
由于函数也是对象,所以函数也有__ proto __ 和 contructor,实例对象没有prototype!!!!
__ proto __
由一个对象指向一个对象 即指向他的原型对象(父对象)
XX.__ proto __ === 父对象.prototype
所有函数.prototype的父对象都是Object
作用是如果当前对象内部没有这个属性的话,就会向上查找,一直到找到这个属性,或者查找道null为止(原型链终结就是null了,null之后在往上找就会报错了, 若不算null,那Object就是对象的最高一层)
const Foo = function() {} // const Foo = new Function()和下面结果相同
const fn = new Foo()
fn.__proto__ === Foo.prototype // true
// 实例往上找原型链,不会经过Function.prototype,因为Foo本身是函数不是实例,Foo.prototype的父对象是Object
Foo.prototype.__proto__ === Object.prototype // true
Foo.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype // true
Object.prototype.__proto__ === null // true
contructor
由一个对象指向一个函数 即指向该对象的构造函数
XX.contructor === 父函数
XX.prototype.contructor === XX
函数最后会以Function收尾
每个对象都可以找到对应的构造函数contructor(有可能是自己定义的,也有可能是__ proto __原型链中找到的,若是通过原型链找到的,那么contructor值就是原型链的contructor),所有函数和对象都是由Function的构造函数得来的,所以contructor的终点就是Function(另外Function对象比较特殊,他的contructor就是自己即Function)
![](https://img.haomeiwen.com/i7343547/f738050ed0c4475b.png)
// 普通函数/方法的构造函数,是父函数,ps Function是自己,因为他封顶了
fn.constructor === Foo // true
Foo.constructor === Function // true
Object.constructor === Function // true
Function.constructor === Function // true
// 函数prototype的构造函数就是函数自己本身
Foo.prototype.constructor === Foo // true
Object.prototype.constructor === Object // true
prototype
由一个函数指向一个对象
含义为所有实例的原型对象
网友评论