在第一种情况下,原型链比第二种情况要长。
function Func() {};
Func.__proto__ == Function.prototype; //true
Func.__proto__.__proto__ == Object.prototype; //true
Func.__proto__.__proto__.__proto__ == Object.prototype; //false
Func.__proto__.__proto__.__proto__.__proto__ == Object.prototype; //Cannot read property '__proto__' of null
在第二种情况下,它更短。
let obj = {};
obj.__proto__ == Object.prototype; //true
obj.__proto__.__proto__ == Object.prototype; //false
obj.__proto__.__proto__.__proto__ == Object.prototype; //Cannot read property '__proto__' of null
为什么?在第二个示例的倒数第二行中,obj.__proto__.__proto__ == Object.prototype尚不清楚它返回的原因false。虽然这Object.prototype似乎也是圣应该的样子__proto__。在第一种情况下,行中有Func.__proto__.__proto__ == Object.prototypeSt __proto__.。他为什么不在这里?有什么区别?
__proto__并不总是指Object.prototype,所以这没有矛盾:Object.prototype.__proto__不是指Object.prototype,而是指null,否则你会得到一个循环的、无限的原型链。