在第一种情况下,原型链比第二种情况要长。
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.prototype
St __proto__
.。他为什么不在这里?有什么区别?
__proto__
并不总是指Object.prototype
,所以这没有矛盾:Object.prototype.__proto__
不是指Object.prototype
,而是指null
,否则你会得到一个循环的、无限的原型链。