有谁知道是否有一个?

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

编辑:

我在这里张贴了我想做的 fiddle :

http://jsfiddle.net/sAzPA/

<div id="some">
  ...
</div>

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();

此外,由于在Javascript中,对象的工作方式类似于关联数组,因此您可以使用以下数组语法调用任何对象的任何子级:object['childName']。这包括函数,因此您可以为属于对象成员的任何函数执行object['functionName']();

将这两点结合在一起,您可以像下面这样调用任何全局定义的函数:

window['functionName']();

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

[编辑]

正如我所说,这适用于任何对象。 OP的注释表明,他要使用这种功能的功能在JQuery插件中。因此,它们很可能是JQuery对象的一部分,通常按以下方式调用:JQuery().functionName();(或用$代替JQuery)。

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

但是,该技术可以适用于任何Javascript对象。在您使用.functionName()的任何地方,都可以将其替换为['functionName']()

关于php - JavaScript等同于PHP的call_user_func(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5818313/

10-12 12:54