我被告知所有对象都需要有一个原型,但似乎可以使用null
创建一个var obj= Object.create(null);
上面的对象是无原型的,还是有一些无法访问的原生对象作为它的原型,null是不是意味着它没有原型而只是它没有作者创建的原型?
答案 0 :(得分:1)
它没有原型(或者原型是null
)。无法使用Object.prototype(null)
创建的对象访问任何属性。
观察Object.getPrototypeOf(Object.create(null))
的结果为null
。
答案 1 :(得分:1)
所有对象都有一个内部[[Prototype]]插槽,可以是null
或其他对象。
[[Prototype]]为null
的对象的一些示例确实是Object.prototype
和Object.create(null)
。
9.1 Ordinary Object Internal Methods and Internal Slots
所有普通对象都有一个名为[[Prototype]]的internal slot。 此internal slot的值为 null 或对象 并用于实现继承。数据属性 [[Prototype]]对象是继承的(作为属性可见 child object)用于获取访问权限,但不用于set访问权限。 访问者属性是为get访问和set访问继承的。