为啥 Object.prototype instanceof Object 是假的?
Posted
技术标签:
【中文标题】为啥 Object.prototype instanceof Object 是假的?【英文标题】: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
(就语言而言),而不是其祖先名称。
【参考方案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
属性。
【讨论】:
以上是关于为啥 Object.prototype instanceof Object 是假的?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ES5 Object 方法没有添加到 Object.prototype 中?
为啥使用 Object.prototype.hasOwnProperty.call(myObj, prop) 而不是 myObj.hasOwnProperty(prop)?
js中.__proto__既然是存在于内置的 Object.prototype 中不存在与对象中为啥console.log能打印出来?
Object.prototype.__proto__ Object.prototype和 Object.prototype.constructor