如果我写这个
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
不应该手动将原型设置为 null ,因为它会像 Object.create 那样从任何东西继承。提前致谢 :-)
简而言之,如果构造函数的原型不是对象,则给出实例对象.原型作为他们的[[原型]]。
详细信息参见 ECMA-262,§13.2.2 [[Construct]]:
当[[Construct]]内部方法
对于一个 Function 对象 F 被调用
可能为空的参数列表,
采取了以下步骤:
- Let obj是新创建的本机 ECMAScript 对象。
- 设置所有内部方法obj如 8.12 中规定。
- 设置 [[Class]] 内部属性obj to "Object".
- 设置 [[Extensible]] 内部属性obj to true.
- Let proto是调用 F 的 [[Get]] 内部属性的值
与论证“原型".
- If Type(proto) 是 Object,设置 [[Prototype]] 内部属性obj
to proto.
- If Type(proto) 不是 Object,设置 [[Prototype]] 内部属性obj到标准内置对象
原型对象,如中所述
15.2.4。
- Let result是调用 [[Call]] 内部属性的结果
的F,提供obj as the this价值
并提供传递的参数列表
进入 [[构造]] 作为args.
- If Type(result) 是 Object 然后返回result.
- Return obj.
注意到在第 6 项和第 7 项中,null
类型为 null (ECMA-262 §8.2),它与typeof null
,即object.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)