为什么Object .__ proto __.__ proto__不为空?

时间:2015-07-29 16:52:28

标签: javascript prototype

我的理解是Object.__proto__是javascript中的'顶级'原型对象。我希望它的__proto__为空,但在谷歌浏览器中(没有尝试过其他浏览器),事实并非如此。那是为什么?

修改

我知道下面的图片可能是下面的图片的重新哈希,但我自己做了检查我的理解。它有什么问题吗? enter image description here

2 个答案:

答案 0 :(得分:6)

Object是一个函数,__proto__是一个空函数function() {}。根对象是空对象{},而不是Object。所以,当你有一个像{foo:1, bar:1}这样的对象时,它的关系就像这样:

enter image description here

答案 1 :(得分:5)

我认为您错误地将Object.__proto__误认为Object.prototype

Object.prototype.__proto__确实为空,因为Object并未扩展任何内容。

然而,

Object本身就是一个功能 - 又名。 Function的实例 由于Function扩展了Object,因此它的原型具有__proto__属性。
因此,您可以绕过Object.__proto__.__proto__到达Object.prototype,事实上:

Object.prototype === Object.__proto__.__proto__ // should yield true