2010-11-29 149 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