我正在寻找一个窍门。我知道如何在JavaScript中调用动态的任意函数,并传递特定的参数,如下所示:
function mainfunc(func, par1, par2){ window[func](par1, par2); } function calledfunc(par1, par2){ // Do stuff here } mainfunc('calledfunc', 'hello', 'bye');
我知道如何使用arguments内部的集合传递可选的,无限制的参数mainfunc,但是,我不知道如何发送任意数量的参数mainfunc以calledfunc动态发送给它;我该如何完成这样的工作,但是要有任意数量的可选参数(不要使用丑陋的if– else)?
arguments
mainfunc
calledfunc
if
else
function mainfunc(func){ if(arguments.length == 3) window[func](arguments[1], arguments[2]); else if(arguments.length == 4) window[func](arguments[1], arguments[2], arguments[3]); else if(arguments.length == 5) window[func](arguments[1], arguments[2], arguments[3], arguments[4]); } function calledfunc1(par1, par2){ // Do stuff here } function calledfunc2(par1, par2, par3){ // Do stuff here } mainfunc('calledfunc1', 'hello', 'bye'); mainfunc('calledfunc2', 'hello', 'bye', 'goodbye');
使用函数的apply方法:-
function mainfunc (func){ window[func].apply(null, Array.prototype.slice.call(arguments, 1)); }
编辑 :在我看来,这将是一个稍微的调整会更有用:
function mainfunc (func){ this[func].apply(this, Array.prototype.slice.call(arguments, 1)); }
这将在浏览器之外工作(this默认为全局空间)。在mainfunc上使用call也可以:
this
function target(a) { alert(a) } var o = { suffix: " World", target: function(s) { alert(s + this.suffix); } }; mainfunc("target", "Hello"); mainfunc.call(o, "target", "Hello");