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

Bru*_*ger 4 javascript

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

var wrong1 = new Object();
var wrong2 = {};
Run Code Online (Sandbox Code Playgroud)

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

var correct = Object.create({});
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*nce 6

object literal将使用以下原型链创建一个对象.

Object.prototype -> {}
Run Code Online (Sandbox Code Playgroud)

大多数引擎对文字语法进行了大量优化,因为它是如此常见的模式.

要进行比较,请Object.create({})创建一个具有较长原型链的对象.

Object.prototype -> {} -> {}
Run Code Online (Sandbox Code Playgroud)

实例(在最右边)有一个原型{},如前所见已有原型Object.prototype.

Object.create是一个非常有用的功能,用于创建具有自定义原型的对象,它不会遇到与之相同的问题new.但是,我们在这里不需要它,因为{}已经创建了一个具有较短原型链的对象.

我不知道为什么有人会认为添加这个额外的间接层(和性能损失)是一种"最佳实践".

如果有的话,我会说文字语法更安全 - 因为没有办法{}被意外/恶意重新定义,不像Object可以被遮蔽.

var Object = 3;
// ...
Object.create({}) // TypeError: Object.create is not a function(...)
Run Code Online (Sandbox Code Playgroud)

当然,这并不意味着你永远不应该使用Object,但在这种情况下,我认为这{}是最简单的工作工具,因此,它也具有最佳性能.