2010-11-12 106 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");