如果我写这个

var o = Object.create(null)
alert(o instanceof Object) // this is false

最终如何成为真实

function o() {

}
o.prototype = null
alert(new o() instanceof Object) // this is true

不应手动将原型设置为无效,因为它像object。提前致谢 :-)

有帮助吗?

解决方案

简而言之,如果构造函数的原型不是对象,则给出实例 Object.Prototype 作为他们的[[原型]]。

细节在ECMA-262,第13.2.2节[[construct]]中:

当函数对象f的[[构造]]内部方法使用可能空的参数列表调用时,采取以下步骤:

  1. OBJ 成为新创建的本机ecmascript对象。
  2. 设置所有内部方法 OBJ 如8.12所示。
  3. 设置[[class]]的内部属性 OBJ 至 ”目的".
  4. 设置[[扩展]]的内部属性 OBJ真的.
  5. 原始 成为将[[get]]的内部属性称为参数的价值”原型".
  6. 如果类型(原始)是对象,设置[[原型]]的内部属性 OBJ原始.
  7. 如果类型(原始)不是对象,设置[[原型]]的内部属性 OBJ 如15.2.4所述,到标准内置对象原型对象。
  8. 结果 是调用[[呼叫]]内部属性的结果 F, ,提供 OBJ 作为 这个 价值并提供参数列表将[[构造]]作为 args.
  9. 如果类型(结果)是对象然后返回 结果.
  10. 返回 OBJ.

注意到第6和7项中 null 是null类型(ECMA-262§8.2),与 typeof null, ,那是 目的.

其他提示

当您这样实例化时,它将返回 o.

它(隐藏的)原型链 仍然 指着 Object

Prototype

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top