2016-05-31 86 views
4

我一直在谈论到一些专业人士与JavaScript的一个公司工作,我已经被告知,这不是一个很好的做法,创建使用new既不使用全局对象{}一个对象实例,即使我想一个空的对象,像这样:Object.create({}):这是一个好习惯吗?

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

但根据他们和公司的标准最正确的方式,是这样创造的:

var correct = Object.create({}); 

传递一个空对象为原型一个空的物体似乎过于设计,甚至可能是纯粹的poseless。

有人可以提供我的答案,这是为什么建议,或者如果不是,为什么不呢? (可能的利弊。和缺点。)

+5

但是没有按照这些指导方针传递空对象文字'{}'错误? 'Object.create(Object.create({}))'不会更好吗? ) –

+0

的[是什么()\'新对象之间的差异\'和对象的文字符号?](http://stackoverflow.com/questions/4597926/what-is-the-difference-between-new可能的复制-object-and-object-literal-notation) – Oleg

+3

@ el.pescado - 这很好,但这是防弹:'function create(){return Object.create(create())}' –

回答

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,但在这种情况下,我认为{}是这项工作的最简单的工具,因此,它具有最佳的性能了。

+0

你有一个非常好的观点。 “对象”可以被隐藏,'.create'功能也可以被隐藏。 –

+1

我的猜测是有人真的是肛门,并决定如果Object.create()存在...那么它只需要更好 – charlietfl

+0

因此,通过这个评论,我可以假设'var a = {}'是偶数比'var b = new Object()'更安全? –

相关问题