【问题标题】:Why is Object.prototype instanceof Object false?为什么 Object.prototype instanceof Object 是假的?
【发布时间】:2015-01-13 18:00:26
【问题描述】:

为什么下面的返回false?

Object.prototype instanceof Object

【问题讨论】:

  • 因为 Object.prototype 不是由 Object() 函数生成的
  • 但有趣的是,Object.prototype.toString() === "[object Object]"
  • @Aravind: Function 也不是,而是instanceof Object
  • 这也令人困惑,因为typeof Object.prototype"object"
  • @Paul Draper:为什么会让人困惑?它只是对象的type(就语言而言),而不是其祖先名称。

标签: javascript prototype javascript-objects


【解决方案1】:

因为它基本上询问Object.prototype 是否确实从Object.prototype 对象继承:它没有。

a instanceof b 等价于b.prototype.isPrototypeOf(a) - 它测试b.prototype 是否在a 的原型链中。在您的情况下,它不是 in 链,因为它是链本身的开始。 isPrototypeOf 不是反身的。

【讨论】:

  • 兄弟 - 你有没有博客来解释你对 OLOO 与 New 等以及原型等的感受。我喜欢你表达/解释的方式。非常简洁。我可以阅读您的任何网站吗?
  • @jamesemanon:没有(还没有)。不过你可以浏览my SO answers on the topic of course :-)
  • @jamesemanon:老实说,我以前从未听说过OLOO 这个词,我不得不在谷歌上搜索它。但是,是的,这似乎是您应该(或:我确实)在 JS 中使用的思想模型。我喜欢它的通用性,类的概念可以通过它轻松实现。使用构造函数 & new 只是语法糖(就像 ES6 类一样,但具有更“通用”的语法)
  • @Bergi 我对您的回答感到困惑。我想你想说b instanceof a 而不是a instanceof b 在你的具体例子中。
  • @BhojendraNepal:不,这就是我的意思。 a 是实例,b 是构造函数。
【解决方案2】:

引用MDN

instanceof 运算符测试对象是否在其原型中 链接构造函数的prototype 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 2016-02-09
    • 2012-06-02
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多