Javascript:如何动态调用方法并为其动态设置参数
我正在用javascript进行测试,可以动态调用一个方法并为其动态设置参数Javascript:如何动态调用方法并为其动态设置参数,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我正在用javascript进行测试,可以动态调用一个方法并为其动态设置参数 let obj = { method: 'foo1', params: ['one', 'two'] } foo 1(p1, p2) { // do something } 要运行它=> [obj.method](obj.params) 是否有任何方法可以从数组中动态添加参数。是-扩展ES6: window[obj.method](...obj.params); 确保正确访问函数-如果在全局范围内使用
let obj = {
method: 'foo1',
params: ['one', 'two']
}
foo 1(p1, p2) {
// do something
}
要运行它=>
[obj.method](obj.params)
是否有任何方法可以从数组中动态添加参数。是-扩展ES6:
window[obj.method](...obj.params);
确保正确访问函数-如果在全局范围内使用var声明函数,它将绑定到窗口。否则,它将无法在所有的bar eval中访问,这是一种糟糕的做法。对于按字符串名称调用函数:
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
您需要函数作为对象的方法存在,然后可以使用括号符号[]动态调用它,并将方法名称作为字符串传递到括号中作为索引。然后将使用扩展运算符。。。将参数数组展平为分隔列表 其他人将全局窗口作为父对象显示了这一点,但正如我们所知,全局窗口通常是不好的,所以只需创建自己的窗口 下面,我展示了多种方法和参数选择,并要求用户键入他们想要的组合。当然,这种输入可以通过许多其他方式处理 //这些方法必须存储在对象中,以便可以通过 //稍后用括号表示。 设obj={ 方法1:函数foo1p1,p2{ 调用console.logmethod1时使用了:,个参数; }, 方法2:函数foo1p1,p2{ 调用console.logmethod2时使用了:,个参数; }, 参数1:['1','2'], 参数2:['三','四'], }; //获取用户所需的调用要求: let choice=prompenter'method1'或'method2'; 设args=prompenter'params1'或'params2'; //将方法名称作为字符串传递到对象中以提取 //该财产的价值。然后用调用它并查找正确的 //参数属性以相同的方式。使用 //排列运算符。。。。
obj[choice]…obj[args];您正在查找.call或.apply obj.method.callobj.method、obj.params;可能是@briosheje的副本我想你不明白这个问题。obj.method不起作用,因为它是一个字符串,您不能对字符串使用call、apply或bind。@ScottMarcus wops,您是对的,您需要通过窗口调用,除非它属于其他对象。我认为问题在于传递动态参数。