我正在尝试用javascript进行测试,可以动态调用方法并为其动态设置参数。
let obj = {
method: 'foo1',
params: ['one', 'two']
}
foo 1(p1, p2) {
// do something
}
要运行它=>
[obj.method](obj.params)
有什么方法可以动态地从数组中添加参数。
答案 0 :(得分:3)
是-扩展(ES6):
FeignAutoConfiguration
确保正确访问该函数-如果在全局范围内使用window[obj.method](...obj.params);
声明该函数,它将绑定到var
。如果没有,则根本无法访问它(栏window
,这是一个不好的做法)。
答案 1 :(得分:2)
对于按字符串名称的调用函数:
window[obj.method](...obj.params)
示例:
let obj = {
method: 'foo1',
params: ['one', 'two']
}
function foo1(p1, p2) {
console.log(p1, p2)
}
window[obj.method](...obj.params) // result: one two
答案 2 :(得分:2)
您将需要将该函数作为对象的方法存在,然后可以使用括号表示法[]
动态调用它,并将方法的名称作为字符串传递给括号作为索引。然后,您将使用扩展运算符...
将参数数组展平为定界列表。
其他人以全局window
作为父对象显示了这一点,但是(众所周知)全局通常不好,所以只需创建自己的即可。
下面,我展示了多种方法和参数选择,并要求用户键入所需的组合。当然,可以用许多其他方式来处理此输入。
// The methods must be stored in an object so that they can be accessed with
// bracket notation later.
let obj = {
method1: function foo1(p1, p2) {
console.log("method1 was called with: ", arguments);
},
method2: function foo1(p1, p2) {
console.log("method2 was called with: ", arguments);
},
params1: ['one', 'two'],
params2: ['three', 'four'],
};
// Get the user's desired invocation requirements:
let choice = prompt("Enter 'method1' or 'method2'");
let args = prompt("Enter 'params1' or 'params2'");
// Pass the method name (as a string) into the object to extract the
// value of that property. Then invoke it with () and look up the correct
// parameter property in the same way. Flatten the parameter array with the
// spread operator (...).
obj[choice](...obj[args]);