2014-07-07 113 views
0

原型結構中的變量可以在所有實例中具有相同的值嗎?在我的情況下,我需要加載Google API,但我想確保腳本只加載一次。Javascript原型共享變量

SharedVariable.prototype.createCache = function (key, requestFunction, callback) { 

    // <-- this.cache should be a variable shared across all instances 

    if (!this.cache[ key ]) { 
     this.cache[ key ] = $.Deferred(function(defer) { 
      requestFunction(defer); 
     }).promise(); 
    } 
    return this.cache[ key ].done(callback); 
} 

http://jsfiddle.net/BrQkP/

createCache有三個參數:

  1. key基本腳本
  2. requestFunction的SRC是一家只有每key調用一次函數。
  3. callback是一種被稱爲多次

這一功能僅this.cache是一個「全局」變量,它應該在所有情況下的值相同工作的功能。目前它對每個實例都有不同的值,這就是代碼工作不正常的原因。類似於原型的可能性?

+0

您是否正在創建「SharedVariables」的「實例」?或者你想讓所有「SharedVariables」共享一個屬性?請使班級名稱明確無誤。 – Bergi

+0

@Bergi在我的小提琴中,我創建了兩個實例('新的SharedVariables')。每個實例都有一個名爲「cache」的變量。我希望「緩存」在所有實例中具有相同的值。 – Daniel

回答

2

製作原型的cache財產部分:

SharedVariable.prototype.cache = {}; 

現在的SharedVariable參考同一緩存對象的所有實例。

編輯根據您的jsfiddle

http://jsfiddle.net/BrQkP/1/

您創建cache在JavaScript的數組,但你似乎是設置字符串的鍵值。你濫用JavaScript中的數組,因爲它們應該是從零開始的整數索引鍵。相反,如上所述,使用大括號創建一個空對象。

更新的提琴:http://jsfiddle.net/BrQkP/2/

+0

謝謝!我更新了我的小提琴:http://jsfiddle.net/BrQkP/1/ – Daniel