我的代码如下所示:
var MyObj = {
run: function() {
//random function
var fncRun = this.listFnc[Math.floor(Math.random()*this.listFnc.length)];
//call function
this.fncRun(args1, args2);
},
fnc1: function() {
console.log('run with function 1');
},
fnc2: function(args1) {
console.log('run with function 2');
},
fnc3: function(args1, args2) {
console.log('run with function 3');
},
listFnc: new Array("fnc1","fnc2","fnc3"),
};
MyObj.run();
但不行,这是错误:
Uncaught TypeError: undefined is not a function.
有人可以帮助我吗?
答案 0 :(得分:3)
您不能使用this.variable
来调用存储在变量中的方法名称。 JavaScript无法判断您是否要在变量中调用名为variable
的方法或名称存储的方法。你需要this[variable]
:
this[fncRun](args1, args2);
答案 1 :(得分:0)
您有两个问题需要解决:
1:运行函数中的args1和args2未定义;添加到运行功能
run: function(args1, args2) {
}
2:var fncRun
是函数的名称,像这样检索函数:
this[fncRun](args1, args2);
新的运行功能(jsfiddle):
run: function(args1, args2) {
//random function
var fncRun = this.listFnc[Math.floor(Math.random()*this.listFnc.length)];
//call function
this[fncRun](args1, args2);
}