Javascript:如何动态调用方法并为其动态设置参数

时间:2019-06-28 13:27:18

标签: javascript arrays object ecmascript-6

我正在尝试用javascript进行测试,可以动态调用方法并为其动态设置参数。

let obj = {
  method: 'foo1',
  params: ['one', 'two']
}

foo 1(p1, p2) {
 // do something
}

要运行它=>

[obj.method](obj.params)

有什么方法可以动态地从数组中添加参数。

3 个答案:

答案 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]);