有谁知道是否有一个?
我想使用变量名来调用函数。
编辑:
我在这里张贴了我想做的 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/