我一直在与一些在公司使用JavaScript的专业人士交谈,而且我被告知使用new
创建对象实例并不是一个好习惯。使用全局对象{}
,即使我想要一个空对象,如下所示:
var wrong1 = new Object();
var wrong2 = {};
但根据他们和公司的标准,最正确的方法是创建它:
var correct = Object.create({});
将一个空对象传递给一个空对象的原型似乎过于设计,甚至可能没用。
有人可以给我一个答案,为什么这是推荐的,或者如果不是,为什么不呢? (可能的优点和缺点。)
答案 0 :(得分:6)
对象文字将使用以下原型链创建一个对象。
Object.prototype -> {}
大多数引擎都大量优化了文字语法,因为它是如此常见的模式。
要进行比较,Object.create({})
会创建一个具有较长原型链的对象。
Object.prototype -> {} -> {}
该实例(位于最右侧)的原型为{}
,如前所述已有Object.prototype
的原型。
Object.create
对于使用自定义原型创建对象非常有用,并且它不会遇到与new
相同的问题。但是,我们不需要它,因为{}
已经创建了一个具有较短原型链的对象。
我不知道为什么有人会认为添加这个额外的间接层(和性能损失)是最佳实践"。
如果有的话,我会说字面语法更安全 - 因为{}
无法被意外/恶意重新定义,不像Object
可以被遮蔽
var Object = 3;
// ...
Object.create({}) // TypeError: Object.create is not a function(...)
当然,这并不意味着你永远不应该使用Object
,但在这种情况下,我认为{}
是最简单的工具,因此它具有最好的表现。