【问题标题】:Why is Object.__proto__.__proto__ not null?为什么 Object.__proto__.__proto__ 不为空?
【发布时间】:2015-07-29 16:52:27
【问题描述】:

我的理解是 Object.__proto__ 是 javascript 中的“顶级”原型对象。我希望它的__proto__ 为空,但在 Google Chrome 中(没有尝试过其他浏览器),它不是。这是为什么呢?

编辑

我知道下图可能是下图的重新散列,但我自己制作了它以检查我的理解。有什么问题吗?

【问题讨论】:

    标签: javascript prototype


    【解决方案1】:

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

    【讨论】:

    • 我基本上理解那个图,但我有点困惑为什么有两个实体名为“function/Function”和“object/Object”。你介意澄清一下吗?
    • 没关系,我想我明白了。左上角的实体代表Function对象,右边的代表使用Function创建的实例,对吧?
    • 这张图片非常有帮助,并引发了更多的询问。谢谢。
    • @jrahhali:你说得对,我上传了一张更好的图表。
    【解决方案2】:

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

    Object.prototype.__proto__ 确实为 null,因为 Object 没有扩展任何内容。

    Object 本身,然而,是一个函数 - 也就是。 Function 的一个实例。
    由于Function 扩展了Object,它的原型有一个__proto__ 属性。
    因此,您实际上可以绕道Object.__proto__.__proto__ 到达Object.prototype

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

    【讨论】:

    • 是的,我将 Object.__proto__ 与 Object.prototype 混淆了。谈论令人困惑的关系。谢谢。我希望我能接受两个答案。
    猜你喜欢
    • 2016-02-09
    • 2017-04-16
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多