深入探究构造函数、原型链

首先明确一下,原型链有尽头

Object.prototype.__proto__ === null

验证公式:

实例对象.__proto__ === 构造函数.prototype
//例子:
var obj = {}
obj.__proto__ === Object.prototype //true

var s = 'zink'
s.__proto__ === String.prototype  //true
深入探究构造函数、原型链_第1张图片
image.png

构造函数的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仅仅可以用于识别对象是由哪个构造函数初始化

你可能感兴趣的:(深入探究构造函数、原型链)