Object.create的用例(null)

时间:2013-12-27 15:28:43

标签: javascript prototype javascript-objects

我知道使用Object.create(null)会创建一个没有proto属性的对象(即Object.getPrototypeOf( myObj ) === null),但有人可以帮我理解这个用例的用途吗?

换句话说,为什么要创建一个完全为空的对象(即不继承Object.prototype中的任何方法)?

2 个答案:

答案 0 :(得分:7)

在非常罕见的情况下,某些内容可能已添加到Object.prototype

Object.prototype.bar = 'bar';

使用Object.create(null)创建对象可能更好,因为它不会继承此内容,请考虑

({}).bar;                // bar
// vs
Object.create(null).bar; // undefined

这意味着您不必担心,例如,如果您使用了for..in循环

此外,你可以使它失败instanceof测试

Object.create(null) instanceof Object; // false

这是因为instanceof基本上是针对RHS测试原型链,并且没有这样的链。

答案 1 :(得分:4)

您可以将此类对象用于键值映射。如果没有原型链,您可以确保.toString()之类的东西不会在对象上无意中存在。这意味着您可以不小心访问其中的属性,并且可以使用in运算符代替Object.prototype.hasOwnProperty.call