2010-11-29 147 views
0

我建立我的第一個面向對象的JS庫,並具有一塊這可能是超級簡單了一點小麻煩IM ...將我的var設置爲帶參數的匿名函數?

我有這樣的:

var storageLocker = function(catalog){ 
    if(catalog){ 
     this.catalog = catalog; 
    } 
    //my code... 
}() 

我需要能夠做什麼像jQuery這樣的其他庫可以在其中選擇一個元素(在我的情況下選擇一個localStorage項目),然後將其他函數鏈接到它。我所有的工作,但爲了達到最佳做法,並使其更具擴展後,我把它放在一個匿名函數,現在我無法弄清楚如何有語法:

storageLocker('localStorageItem').save({"item":"an example item saved to localStorageItem"}) 

但現在如果我現在用這個語法來做,它返回這個錯誤:

Uncaught TypeError: Property 'storageLocker' of object [object DOMWindow] is not a function 

任何想法?

+0

我讀了你的其他問題,如果你想使用私有變量,你需要使用閉包。也就是說,你應該在最後使用這個結構_with_`()`,但是你需要從內部返回第二個函數,它處理你的實際邏輯。在另一個問題上有一個很好的例子。 – jwueller 2010-11-29 01:49:42

回答

4

刪除函數體末尾的()

你寫var storageLocker = function(...) { ... }(),它創建一個匿名函數,稱之爲,並分配結果storageLocker

這相當於

function anonymous(...) { ... }; 
var storageLocker = anonymous(); 

由於函數不返回任何東西,storageLocker最終被undefined,而不是一個函數。

+0

Awn ... duh ...謝謝:) – 2010-11-29 01:11:16