2013-07-25 22 views
0

我是一位嘗試學習JavaScript精神的Java開發人員。JavaScript靜態對象創建方法的差異

這兩種方法在JavaScript中創建靜態對象的方式與非語法方式不同嗎?從JavaScript程序員的角度來看哪種方法更可接受?

方法答:

var obj = {}; 
obj.field1 = /* some expression */; 
obj.field2 = /* some expression */; 

方法B:

var obj = { 
    field1: /* some expression */, 
    field2: /* some expression */ 
}; 
+1

我傾向於使用方法B.方法A很好,當你需要訪問對象文字。例如,如果你想根據**'field1'定義'field2' **;你不能在對象文字初始化中完全做到這一點。 – Ian

+0

另一種類似但效果不同的方式是在構造函數上使用'new'運算符: var obj = new(function Object(){this.field1 =/* some expression * /; this.field2 =/*一些表達式*/var var privateProperty =「somevalue」; this.field3 = this.field1 + privateProperty;})();'這允許你隱藏一些屬性,如果需要的話。 – chrmod

+0

另一種方法是使用:'Object.create' https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create – chrmod

回答

1

相信兩個對象的最終以類似的方式被創建,並且在性能(如果有的話)將所述差請稍等,以免發現不同之處。

雖然這不是通用的。在創建數組時,使用與B類似的方法會更高效。這是因爲(至少在V8中)分配具有設置大小的數組效率更高,因爲它知道數組的大小。

// Here V8 can see that you want a 4-element array containing numbers: 
var a = [1, 2, 3, 4]; 

// Don't do this: 
a = []; // Here V8 knows nothing about the array 
for(var i = 1; i <= 4; i++) { 
    a.push(i); 
} 

來源:Smashing Magazine

我建議嘗試的Chrome Profiling Tools看到,如果你可以看到這兩種方法的效率之間的差異,但我想,如果是有區別的將是太小做出改變。此外,如果您是JavaScript新手,我會建議您查看由AirBnB創建的真棒JavaScript style guide。編寫高效而乾淨的JavaScript有很多重要的技巧。

+0

+1爲JavaScript風格指南鏈接。 – bdkosher