原型链简图
需要注意的几点
- 函数也是对象。
- 对象具有隐式原型(
__proto__
),隐式原型指向其构造函数的原型对象,通常讲一个对象的原型是XXX,其实是说它的隐式原型,其实在这个对象上并没有原型(prototype
)这个属性。 - 函数(一般指构造函数)有原型(
prototype
)和隐式原型(__proto__
),默认情况下隐式原型指向Function.prototype。 - 为了记录「临时对象person1是由哪个函数创建的」,所以预先会给「Person.prototype」加一个 constructor 属性,即
Person.prototype.constructor = Person
。你会发现person1.constructor === Person
,其实person1并没有constructor这个属性,但是它会去它隐式原型上找,因此这里实际判断的是person1.__proto__.constructor === Person
。