2014-03-03 49 views
0

給出一個元素:從創建一個自定義標籤的值的功能屬性

<div id='adiv' customAttr='myFuncToExecute'></div> 

什麼是讀取自定義屬性的最佳方式,並將其轉換成在JavaScript中可執行的方法。我目前使用的new Function()構造:

if ($('#adiv').attr('customAttr')) { 
    var myFuncV1 = new Function('return ' + $('#adiv').attr('customAttr') + '()'); 
    var myFuncV2 = new Function($('#adiv').attr('customAttr')); 
} 

myFuncV1將可執行文件myFuncV1()。或者,我可以在事件處理程序綁定使用myFuncV2

$('#adifferentdiv').click(myFuncV2); 

這樣確實對我的需要,但使用new Function()構造相當於使用eval()

問題:是否有更好的方法來讀取和評估(無雙關語意圖)自定義屬性,其中包含要在腳本的其他地方使用的方法的名稱?

在此先感謝您的幫助。

回答

1

使對象的方法屬性,然後你可以刪除新功能方法:

var obj = {someMethod: function(){...}}; 

obj[$('#adiv').attr('customAttr')](); 

雖然你可能想測試obj[$('#adiv').attr('customAttr')]存在調用它,如前

var fn = obj[$('#adiv').attr('customAttr')]; 

if (fn) fn(); 
+0

謝謝。我很確定這正是我正在尋找的。一個快速的問題:有沒有辦法做到這一點,方法將接受參數?我假設同樣的事情:'var obj = {someMethod:function(param1,param2){...}};'? – Bic

+0

其中,* param1 *是一個表示非全局變量名稱的字符串,no。您可以使用帶方括號表示法的字符串來訪問對象的命名屬性,就是這樣。全局變量是一種特殊情況,因爲它們是全局(瀏覽器中的窗口)對象的屬性。沒有其他變量的等價物(因爲函數執行上下文的「變量對象」或[*環境記錄*](http://ecma-international.org/ecma-262/5.1/#sec-10.2.1)不能直接訪問)。 – RobG

相關問題