2013-05-25 48 views
-1

在某些情況下,我也喜歡集團通過上下文我的變量由前綴的變量名,如(例如1)一個對象在JavaScript變量的存儲

var context_var1 = "value"; 
var context_var2 = "value"; 
var context_var3 = "value"; 
var context_var4 = "value"; 

現在我要寫一個腳本,我看看不同的聲明樣式,例如「僅酮VAR-關鍵字式」(實施例2)

var context_var1 = "value", 
    context_var2 = "value", 
    context_var3 = "value", 
    context_var4 = "value"; 

或 「逗號第一式」(實施例3)

var context_var1 = "value" 
    , context_var2 = "value" 
    , context_var3 = "value" 
    , context_var4 = "value" 
    ; 

。但說實話,我最喜歡第一個例子。 個人認爲我認爲這是最具可讀性的風格。 但是我想到了以下幾點:

var context = { 
    var1 : "value", 
    var2 : "value", 
    var3 : "value 
}; 

然後,我可以通過

console.log(context.var1); 

那麼你認爲訪問值。將JavaScript對象用作某種變量存儲是個好主意嗎?

編輯: 由於它被要求了幾次,下面是一個真實世界的例子,我存儲了一些對象的變量。

 /** 
     * 
     * Dom nodes which will be used a couple of times on various places. 
     * Grouped into an object by context. 
     * 
     * @type {DOM nodes} 
     * 
     */ 
     var $dom = { 
      document : $(document), 
      head : $("head"), 
      body : $("body") 
     }; 


     /** 
     * 
     * Calculate values based on the document height and 
     * window width. 
     * 
     * @return {Object} 
     * 
     */ 
     var gauge = function() { 

      var body_fontsize = parseInt($dom.body 
       .css("font-size") 
       .replace("px", ""), 10 
      ); 

      var window_width = window.screen.availWidth; 
      var document_height = $dom.document.height(); 
      var bline_count = Math.round(document_height/body_fontsize); 
      var vline_count = Math.round(window_width/body_fontsize); 

      return { 
       width : window_width, 
       height : document_height, 
       baselines : bline_count, 
       vertlines : vline_count 
      }; 

     }; 
+3

你認爲JS對象是用於存儲某些數據的嗎? – zerkms

+0

@zerkms當然是的。但是,聲明簡單變量的常見方式似乎「總是」與示例1-3相似。 – Saucier

+1

@Ube可能在程序編程中。不在JavaScript中。 – Bart

回答

2

正如指出的那樣,這就是對象的存在,它們將提供命名空間數據的可能性。然而,使用對象可能有一個缺點:如果你的代碼對性能至關重要,你應該依賴局部變量 - 儘管聰明的選擇通常是將(數據組)!數據保存在對象中,然後只是分配他們到關鍵代碼中的局部變量。

其原因在於,查找本地變量所花費的時間比查找本地變量時間要長。這意味着,如果你避免不斷查找鏈

for (var i = 0; i <= 100000; i++) { 
    doSomething(myObj.subObject.anotherObject[i]); 
} 

會執行得更快:

var actuallyNeeded = myObj.subObject.anotherObject; 
for (var i = 0; i <= 100000; i++) { 
    doSomething(actuallyNeeded[i]); 
} 

只要你的代碼是不是在性能方面至關重要,這是不必要的,當然。

2

你正在尋找這個詞是命名空間。而且,在JavaScript中,Objects對它來說非常棒。

絕對是最常用的命名空間聲明語法。

+1

當局部變量分組到一個對象/單元中時,它不是命名空間。通常情況下,當變量如此定義時,您已經處於局部變量範圍內,然後命名空間並沒有真正意義。 – Atle

+0

我不同意。儘管局部變量註釋是正確的。我看不到它與 – Alexander

+0

的相關性大多數時候你聲明瞭一組變量,它在本地範圍內,沒有變量名衝突的風險。所以不需要不同的名稱空間。只有在向全局範圍添加函數和變量時,才需要命名空間。但即便如此,創建一個本地未命名範圍的閉包也同樣有用。我同意這個語法對於創建命名空間是很好的,但我認爲這與這個問題沒有關係。也許我們只是瞭解不同的問題? – Atle