2010-11-12 104 views
1

我想動態地調用一個自定義類的方法,就像下面的javascript一樣。除了下面的JavaScript只調用我的代碼中存在的函數。我想調用(動態)一個類的功能。所以我會刪除window{value](target, event, self);並使用其他可以調用自定義創建類的方法,比如「mycustomclass.anythingcouldbethismethod(target,event,self);」當然它已經被實例化了。用javascript動態調用一個類的方法

var functions = [ 
       'ajaxify_overlay', 
       'ajaxify_overlayCancel', 
       'ajaxify_overlaySubmit', 
       'ajaxify_rollout', 
       'ajaxify_rolloutCancel', 
       'ajaxify_rolloutSubmit', 
       'ajaxify_upload', 
       'ajaxify_contentArea', 
       'ajaxify_itemToggler', 
       'ajaxify_closer', 
       'ajaxify_submit', 
       'ajaxify_inputActivate', 
       'ajaxify_executeAndRefresh', 
       'ajaxify_empty' 
       ]; 

$(document).bind('ready', function(event) { 

    $('body').live('click', function (event){ 

    var target = $(event.target); 

    var self = this; 

    $.each(functions, function(index, value){ 

    if($(target).hasClass(value)) { 

     window[value](target, event, self); 

    } 

      });  

     }); 

}); 
+0

它是什麼,你問? – 2010-11-12 18:58:11

+0

@Jakub:所以你剛剛實例化了一個類。你想調用該類的一個方法。該方法的名稱作爲字符串存儲在某個變量中。你怎麼稱呼這個方法? (這是極大地簡化了上述) – bmarti44 2010-11-12 19:00:30

+0

他只是想動態調用保存在名爲'functions'的數組中的方法 – 2010-11-12 19:00:58

回答

8
var myClass = { /* your class definition */ }; 
var methodName = 'myMethod'; 
myClass[methodName](p1,p2,...,pN); 
+0

如果我做了var myClass = new CustomClass(); CustomClass是我創建的類嗎? – bmarti44 2010-11-12 19:05:41

+0

偉大的這個工作,謝謝我沒有意識到我可以使用括號和點符號與JS類。 – bmarti44 2010-11-12 19:08:06

+0

@ bmarti44這適用於所有JavaScript對象。例如,你可以這樣做:var arr = []; var methodName ='push'; ARR [方法名](1); – Matt 2010-11-12 19:09:20

0

您的意思是這樣的?

function methodCaller(methodName, target, event, self) { 
    mycustomclass[ methodName ](target, event, self); 
} 

methodCaller("someMethodName");