我一直在与公司中使用 JavaScript 的一些专业人士交谈,他们告诉我使用 new
或全局对象 {}
,即使我想要一个空对象,如下所示:
var wrong1 = new Object();
var wrong2 = {};
按照他们和公司的标准,正确的做法是这样创建:
var correct = Object.create({});
将空对象作为空对象的原型(prototype)进行传递似乎设计过度,甚至可能毫无目的。
有人可以告诉我为什么推荐这样做吗?如果不推荐,为什么不推荐? (可能的利弊。)
最佳答案
对象字面量将创建一个具有以下原型(prototype)链的对象。
Object.prototype -> {}
大多数引擎都对文字语法进行了大量优化,因为它是一种常见的模式。
为了比较,Object.create({})
创建了一个具有更长原型(prototype)链的对象。
Object.prototype -> {} -> {}
实例(在最右边)有一个 {}
的原型(prototype),如前所述,它已经有一个 Object.prototype
的原型(prototype)。
Object.create
是一个非常有用的函数,可用于使用自定义原型(prototype)创建对象,并且它不会遇到与 new
相同的问题。但是,我们在这里不需要它,因为{}
已经创建了一个原型(prototype)链较短的对象。
我不知道为什么有人会认为添加这个额外的间接层(和性能损失)是“最佳实践”。
如果有的话,我会说文字语法更安全——因为 {}
不可能被意外/恶意地重新定义,不像 Object
可以阴影。
var Object = 3;
// ...
Object.create({}) // TypeError: Object.create is not a function(...)
当然,这并不意味着您永远不应该使用 Object
,但在这种情况下,我认为 {}
是最简单的工作工具,并且作为结果,它也具有最好的性能。
关于javascript - 对象.create({}) : Is is a good practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37544955/