四大规则理解JS原型链
什么是原型链
四大规则
规则1 __proto__ 与 prototype
1 对象拥有__proto__属性
2 函数拥有prototype属性
推论:函数是对象,函数也拥有__proto__
规则2 构造函数规则(new规则)
1 实例对象的constructor属性指向构造函数
2 实例对象的__proto__指向构造函数的prototype
// eg
let a = new A
a.constructor === A
a.__proto__ === A.prototype
规则3 继承规则
1 构造函数的prototype指向父类实例。没有父类时,是一个空对象。简便起见,也可以称作A.prototype
2 子类构造函数的__proto__指向父类,顶级类构造函数的__proto__指向Function.prototype
eg: class B extends A
等价于 B.prototype = new A,B.__proto__ === A
// 延伸一下
let b = new B
b.__proto__ === B.prototype
// 已知:b.__proto__是A的实例对象,根据规则1,可以得到原型链
b.__proto__.__proto__ === A.prototype
a.__proto__ === b.__proto__.__proto__
规则4 特殊原型
1 Object.prototype, Function.prototype 是独立的原型对象;
2 Function.prototype.__proto__ === Object.prototype
3 Object.prototype.__proto__ === null
原型链图
根据上述4个规则,可以画出那张有名的原型链图。

简而言之:Object.prototype是万法之祖,Function.prototype是函数之祖,null是无生一,一生二,二生三。
浙公网安备 33010602011771号