2016-05-31 122 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()'更安全? –

相關問題