Object.create({}):这是一个好习惯吗?

时间:2016-05-31 11:49:26

标签: javascript

我一直在与一些在公司使用JavaScript的专业人士交谈,而且我被告知使用new创建对象实例并不是一个好习惯。使用全局对象{},即使我想要一个空对象,如下所示:

var wrong1 = new Object();
var wrong2 = {};

但根据他们和公司的标准,最正确的方法是创建它:

var correct = Object.create({});

将一个空对象传递给一个空对象的原型似乎过于设计,甚至可能没用。

有人可以给我一个答案,为什么这是推荐的,或者如果不是,为什么不呢? (可能的优点和缺点。)

1 个答案:

答案 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,但在这种情况下,我认为{}是最简单的工具,因此它具有最好的表现。