Javascript 为什么手动初始化为null的原型仍然从对象继承
如果我写这个Javascript 为什么手动初始化为null的原型仍然从对象继承,javascript,prototype-programming,Javascript,Prototype Programming,如果我写这个 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那样从零继承。提前感谢:-)当您这样实例化它时,它将返回一个对象o 它的(隐藏的
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那样从零继承。提前感谢:-)当您这样实例化它时,它将返回一个对象
o
它的(隐藏的)原型链仍然指向对象
简单地说,如果构造函数的原型不是对象,那么实例将被指定为Object.prototype作为它们的[[prototype]] 详情见ECMA-262,§13.2.2[[结构]: 当[[Construct]]内部方法 对于函数对象,用 参数列表可能为空, 采取以下步骤:
注意,在第6项和第7项中,
null
为null类型(ECMA-262§8.2),它与typeof null
不同,这就是对象。所以我猜区别在于create函数创建了一个对象的字面等价物?但函数总是会创建一个对象,不管对象固有什么?@rubixibuc a函数在JavaScript中总是一个对象。rubixibuc-如果将构造函数的原型设置为非类型(Object),那么它构造的实例的[[prototype]]将是Object.prototype。@RobG这很奇怪,因为我发现浏览器错误地说typeof null==“Object”
。