我在JavaScript中有一个私有函数的名称作为字符串,我该如何调用该函数?
var test = function () {
this.callFunction = function(index) {
return this["func" + index]();
}
function func1() { }
function func2() { }
...
function funcN() { }
}
var obj = new test();
obj.callFunction(1);
答案 0 :(得分:3)
func1
和朋友是局部变量,不是对象的成员。你不能这样称呼它们(至少不是以任何理智的方式)。
使用函数表达式(而不是函数声明)定义它们并将它们存储在数组中。
var test = function () {
this.callFunction = function(index) {
return funcs[index]();
}
var funcs = [
function () {},
function () {},
function () {}
];
}
var obj = new test();
obj.callFunction(0);
答案 1 :(得分:1)
如您的代码所示,这些函数不作为实例的属性出现。您需要做的是将它们创建为上下文的属性。
var test = function () {
this.callFunction = function(index) {
return this["func" + index];
}
this.func1 = function() { }
this.func2 = function() { }
...
}
var obj = new test();
obj.callFunction(1)();
答案 2 :(得分:0)
你可以使用eval
var test = function () {
this.callFunction = function(index) {
return eval("func" + index + '()');
}
function func1() {
return 1;
}
function func2() {
return 2;
}
function funcN() { }
};
var obj = new test();
obj.callFunction(2);
eval是邪恶的
答案 3 :(得分:0)
您可以使用私有函数数组:
var test = function() {
var func = [
function() { return "one" },
function() { return "two"; }
]
this.callFunction = function(index) {
return func[index]();
}
}
var obj = new test();
var ret = obj.callFunction(1);
console.log(ret);