【发布时间】:2016-06-03 03:51:01
【问题描述】:
有人告诉我所有对象都需要有一个原型,但似乎可以用 null 创建一个
var obj= Object.create(null);
上面的对象是没有原型的还是它有一些不可访问的原生对象作为它的原型,null 是否意味着它没有原型,而只是它没有作者创建的原型?
【问题讨论】:
标签: javascript prototype
有人告诉我所有对象都需要有一个原型,但似乎可以用 null 创建一个
var obj= Object.create(null);
上面的对象是没有原型的还是它有一些不可访问的原生对象作为它的原型,null 是否意味着它没有原型,而只是它没有作者创建的原型?
【问题讨论】:
标签: javascript prototype
它没有原型(或者原型是null)。使用Object.prototype(null) 创建的对象无法访问任何属性。
观察Object.getPrototypeOf(Object.create(null)) 的结果是null。
【讨论】:
所有对象都有一个内部 [[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]] 对象被继承(作为属性可见 子对象)用于获取访问权限,但不适用于设置访问权限。 获取访问和设置访问都继承了访问器属性。
【讨论】: