为什么Object.prototype .__ proto__ === null

时间:2013-08-21 13:41:46

标签: javascript ecmascript-5

在JavaScript非标准属性__ proto__和函数Object.getPrototypeOf(...)中返回内部属性[[Prototype]]。

对于所有功能,属性'原型'是Object.prototype的一个实例,例如:

Array.prototype instanceof Object//true

但对于Object.prototype:

并非如此
Object.prototype.__proto__ === null //true
Object.getPrototypeOf( Object.prototype ) === null //true

mozilla developer documentation只说:

  

对象的 proto 属性引用与其相同的对象   内部[[原型]](通常称为"原型"),其中   可以是一个对象,或者在默认情况下   Object.prototype。 proto ,null。

Object.prototype。 proto 或失败的Object.getPrototypeOf(Object.prototype)是否更适合返回Object.prototype?

这是一个错误吗?这个可以吗?为什么呢?

1 个答案:

答案 0 :(得分:3)

原型链必须停在某处。

如果Object.getPrototypeOf( Object.prototype ) === Object.prototype,JS引擎在尝试从原型中解析某些内容时会进入无限循环。

它会将原型链向上移动到Object.prototype,如果它没有找到它,它会再次走到Object.prototype ad infinitum

事实上,如果你自己尝试这样做,你会收到一个错误:

> Object.prototype.__proto__ = Object.prototype
Error: Cyclic __proto__ value

请注意,您也可以通过调用[[Prototype]]创建自己没有Object.create(null)的对象。