Object.create(null)的用例?

Win*_*ade 8 javascript null prototype

如果你创建一个常规的javascript对象使用说它var obj = {};会有对象原型.使用var obj = new MyClass();Before 创建的对象Object.create也是如此,因为没有办法解决这个问题.但是现在可以创建一个没有原型(分别null作为其原型)的对象var obj = Object.create(null);.

为什么这很重要?它带来了什么好处?有没有真实世界的用例?

six*_*man 10

它是一个完全空的对象(没有任何继承自任何.prototype包含Object.prototype),因此可以保证只有在将属性显式添加到对象时,任何属性查找才会成功.

例如,如果您想要存储一些您不会事先知道密钥的数据,则提供的密钥可能与其成员具有相同的名称Object.prototype,并导致错误.

在这些情况下,您需要进行显式.hasOwnProperty()检查以排除意外的继承值.但是,如果没有任何继承,您的测试可以简化为if (key in my_object) {测试,或者if (my_object[key]) {如果合适的话可能是简单的测试.

此外,由于没有原型链,我认为查找不存在的属性会更快,因为只需要检查直接对象.实际上是否实现(由于优化)将通过性能测试来确定.