Prototype和__proto__

1, 只有函数有prototype这个属性.属性值是 一个有constructor属性的对象.

2 new 通过new关键字创建一个实例的时候,实例继承构造函数prototype上的所有属性和方法.方法是 :通过设置自己的__proto__指向构造函数的prototype.

3, 构造函数通过prototype来存储要共享的属性和方法.也可以设置prototype指向现存的对象A来继承A对象的属性和方法

4, 对象的__proto__总是指向构造该对象的函数的原型prototype.


原型链

在上图中,构造函数Foo既有prototype属性,也有__proto__属性.prototype属性是es规范的规定,是一个对象,包含在构造函数定义(不需要等到执行)

时候就自动生成的一个包含constructor属性的对象.如下图,以及需要共享的属性和方法.

函数的prototype和constructor



上面说到,实例的__proto__属性的值是该实例的构造函数的prototype,所以f1和f2实例的__proto__就是他们的构造函数Foo的原型prorotype.

构造函数Foo本身即是函授,也是对象,所以也有__proto__属性,该属性的值就是能够构造Foo函数的构造函授的prototype,那么Foo函数由谁构造呢?

从上图可以看出,是function Function(){},所以构造函数Foo的__proto__指向他的构造函数 Function的原型Function.prototype.整体脉络很清晰,但

是有两个要注意的点.一个是Function构造函授的__proto__和prototype都是指向Function.prototype.同时,Object构造函数的__proto__也指向

Function.prototype.由此可以得出结论: Function的两个实例是Function构造函数和Object构造函数.Object可以理解,Function是什么原因?

你可能感兴趣的:(Prototype和__proto__)