我正在寻找一个窍门。我知道如何在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
)?
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也可以:
function target(a) {
alert(a)
}
var o = {
suffix: " World",
target: function(s) { alert(s + this.suffix); }
};
mainfunc("target", "Hello");
mainfunc.call(o, "target", "Hello");
问题内容: 我有一个字符串数组,其中包含类中方法的名称 在课堂上,我正在创建一个实例(例如)。现在,我可以调用,只是我想循环读取String数组。这可能吗? 问题答案: 您可以使用反射。通过调用完成 您必须处理大量异常,并且您的方法必须为。需要注意的是Java编码惯例喜欢到。 但是,使用反射应该是最后的选择。您应该使用更多的面向对象技术。 如果您经常需要类似的功能,也许您可以看看在Java平台
调用回调函数,并把一个数组参数作为回调函数的参数。 local args = {...} or {} method_name(unpack(args, 1, table.maxn(args))) 使用场景 如果你的实参 table 中确定没有 nil 空洞,则可以简化为 method_name(unpack(args)) 你要调用的函数参数是未知的; 函数的实际参数的类型和数目也都是未知的。 伪代
问题内容: 我有以下代码: 我怎么能叫和动态? 例如: 我使用了大括号,因为这是我以前在PHP中使用的方式,但是显然不起作用。 如何使用Python做到这一点? 问题答案: 如果不想使用并且不想创建单独的模块和/或类来封装要动态调用的函数,则可以将它们作为当前模块的属性来调用:
我已经创建了自定义PowerShell cmdlet,并且正在为它们编写测试脚本。 我得到cmdlet的列表,并且我必须向它传递一个非字符串类型的对象。我尝试使用Invoke-Expression,但我得到一个错误,它使用字符串名称作为参数值。
我正在与Javascript、Mocha、Chai和SinonJ合作。我想做的是监视一个“equals”方法,该方法由另一个方法“compareUsingOperator”动态调用。下面的代码显示了我的类“StringComparator”,它有两个方法“equals”和“compareUsingOperator”。 这是我的单元测试: 在我的单元测试中,我在“equals”方法上设置了一个间谍,
我有一个要求。你能建议一下实现这一目标的可能方法吗。 我想根据每个路由中传递的URL更改应用程序的主题。我正在使用以下技术。-前端:AngularJS-后端:节点。js 例如:localhost/x/关于localhost/y/关于 我通过使用Location传递参数,通过cookies实现了这些。登录时进行搜索。但我在所有路线上都需要那个主题参数。基于这个主题,我们需要改变。有人能提出可能的方法