首先明确一下,原型链有尽头
Object.prototype.__proto__ === null
验证公式:
实例对象.__proto__ === 构造函数.prototype
//例子:
var obj = {}
obj.__proto__ === Object.prototype //true
var s = 'zink'
s.__proto__ === String.prototype //true
构造函数的prototype
也是一个对象
Array.prototype instanceof Object //true
Function.prototype instanceof Object //true
所以可以将验证公式变形为:
构造函数.prototype.__proto__ === Object.prototype
而所有构造函数的__proto__
都指向了Function.prototype
,所以函数都是构造函数Function的示例对象
Array.__proto__ === Function.prototype //true
Function.__proto__ === Function.prototype //true
Object.__proto__ === Function.prototype //true
__proto__
每个实例对象的__proto__
一定对应一个原型对象,并且从原型对象上继承属性和方法。
prototype
当你创建函数时,JS会为这个函数自动添加prototype
属性,值是一个有 constructor
属性的对象,不是空对象。
constructor
constructor
仅仅可以用于识别对象是由哪个构造函数初始化