__proto__
- 每个对象(函数)都具有一个名为__proto__的属性,它指向原型对象,存在于实例和构造函数的原型对象之间,原型链就是靠它形成的
- 对象的__proto__指向其构造函数的prototype
- 构造函数的__proto__指向Function.prototype
- 原型链到Object.prototype终止 但Object.prototype的原型为null
- Function.prototype.__proto__ === Object.prototype
- Object.prototype.__proto__ === null
- Function.prototype.__proto__.__proto__ === null
prototype
- 每个函数都有一个prototype属性,原型对象包含需要共享的属性和方法
- 对象不具有prototype属性 只有函数才具有
- 每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法
constructor
- 原型对象prototype都具有constructor属性,指向该对象所在的构造函数
- 实例对象.constructor === 构造函数 === 实例对象.__proto__.constructor
- 构造函数.constructor === Function