2013-07-09 54 views
0

我已經構建了一個將使用模塊的插件。基本上可以添加到代碼的功能,以提供額外的功能。js:從一個變量返回一個一級對象和一個字符串

在插件是一個函數來調用這些模塊。此前,我曾要求他們這樣的:

processInstance($(doc).find('[data-bcp-crumbs]'), crumbs); 
processInstance($(doc).find('[data-bcp-copyright]'), copyright); 
processInstance($(doc).find('[data-bcp-activenav]'), activeNav); 

每一行的最後一部分是將在processInstance的腳本中調用的函數的名稱。所以,我將函數的名稱同時作爲字符串和每行上的第一類對象。我想簡化到這樣的事情:

for (var i=0; i>module.length;i++) { 
    processInstance($(doc).find('[data-bcp-'+module[i].toLowerCase()+']'), window[module[i]]); 
} 

模塊數組被添加到實際模塊代碼的每個實例之後。我這樣做是這樣的:

module.push('crumbs'); 

這不起作用,因爲window [module [i]]返回undefined。

我的代碼如何修改才能完成這項工作?

下面是一個簡單的模塊,整個插件插入的的jsfiddle例如:http://jsfiddle.net/michaeljimmy/U8anp/1/

+0

問題是什麼? – jeffo

+0

我在我的問題中添加了實際問題? :) –

+0

請發佈所有相關的代碼! – alfasin

回答

0

我的一位同事幫我找到這個問題的答案。首先,我注意到了for循環中的一個錯誤。我有>而不是<。這沒有幫助。 :)

該代碼的概念是正確的。問題是範圍。如果你看看jsfiddle,你會發現整個事物都在一個機箱中,包括我試圖調用的函數。所以,窗戶無法訪問這些功能。我們結束了幾個簡單的改變。

首先,module.push沿( '屑'),或任何函數名是,我們添加:

functions.crumbs = crumbs; 

然後,而不是使用窗口[模塊[I]],我們使用

functions[module[i]] 

沒有外殼,window [module [i]]本來可以正常工作。

相關問題