javascript相当于PHP的call_user_func()

有谁知道是否有一个?

我想使用变量名称调用函数。


编辑:

我在这里发布了一个小提琴我想要做的事情:

http://jsfiddle.net/sAzPA/

...

JS:

 (function($){ $.fn.MyPlugin = function(){ return this.each(function(){ var somefunction = function(arg1, arg2){ alert(arg1); }, someotherfunction = function(arg1, arg2){ alert(arg2); }, reallyimportantfunction = function(arg1, arg2){ var foo = $(this).attr('id') + 'function'; // here I want to call the function with the foo value as name, and pass it arg1 and arg2 $()[foo](arg1, arg2); // <- doesn't work }; reallyimportantfunction(); }); }; })(jQuery); jQuery(function($){ $('#some').MyPlugin (); }); 

如果在全局级别定义函数,则它将自动成为window对象的子级。

因此,您始终可以调用window.functionName(); 你通常只会调用functionName();任何地方functionName();

此外,由于Javascript对象的工作方式与关联数组类似,因此可以使用如下所示的数组语法调用任何对象的任何子对象: object['childName'] 。 这包括函数,所以你可以做object['functionName'](); 对于作为对象成员的任何函数。

将这两点组合在一起,您可以调用任何全局定义的函数,如下所示:

 window['functionName'](); 

由于上例中的functionName是一个字符串,因此您可以在这些括号中使用变量,这意味着您具有与PHP的call_user_func()相同的function。

[编辑]

正如我所说,这适用于任何对象。 OP的评论声明他想要以这种方式使用的函数是在JQuery插件中。 因此它们可能是JQuery对象的一部分,通常会像这样调用: JQuery().functionName(); (或用$代替JQuery )。

Javascript语法允许我们在任何可以使用.functionName()地方使用['functionName']() ,因此,采用上面的JQuery示例,我们可以将其更改为如下所示:

 JQuery()['functionName']();` 

但是这种技术可以适用于任何Javascript对象。 使用.functionName()任何地方,都可以用['functionName']()替换。

有很多方法可以实现这一目标。 最快和最脏(和不安全!)的方法是做(PS:fnName在下面的例子中是存储为字符串的函数的名称)

 eval(fnName) 

不过你也可以这样做

  this[fnName]();//careful with "this" though. Try replacing with "window" if it doesnt work for you 

或者通过传递参数来调用它

 this[fnName].apply(contextObject,argumentArray) //contextObject will be objest which will be referenced by the keyword "this" within the function body (fnName's body), argumentArrayy is the array of arguments you want to pass to function. 
 var a = function(foo) {console.log(foo);} a.call(null, 'test'); a('test');