Javascript 如何使用诸如“function someName(){}”之类的名称调用函数?
在JavaScript中,我有一个私有函数的名称作为字符串,如何调用该函数Javascript 如何使用诸如“function someName(){}”之类的名称调用函数?,javascript,Javascript,在JavaScript中,我有一个私有函数的名称作为字符串,如何调用该函数 var test = function () { this.callFunction = function(index) { return this["func" + index](); } function func1() { } function func2() { } ... function funcN() { } } var obj = ne
var test = function () {
this.callFunction = function(index) {
return this["func" + index]();
}
function func1() { }
function func2() { }
...
function funcN() { }
}
var obj = new test();
obj.callFunction(1);
func1和friends是局部变量,而不是对象的成员。你不能那样叫他们,至少不能用任何理智的方式
使用函数表达式而不是函数声明来定义它们,并将它们存储在数组中
var test = function () {
this.callFunction = function(index) {
return funcs[index]();
}
var funcs = [
function () {},
function () {},
function () {}
];
}
var obj = new test();
obj.callFunction(0);
func1和friends是局部变量,而不是对象的成员。你不能那样叫他们,至少不能用任何理智的方式
使用函数表达式而不是函数声明来定义它们,并将它们存储在数组中
var test = function () {
this.callFunction = function(index) {
return funcs[index]();
}
var funcs = [
function () {},
function () {},
function () {}
];
}
var obj = new test();
obj.callFunction(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是邪恶的你可以使用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是邪恶的在代码中,函数不作为实例的属性出现。您需要做的是将它们创建为上下文的属性
var test = function () {
this.callFunction = function(index) {
return this["func" + index];
}
this.func1 = function() { }
this.func2 = function() { }
...
}
var obj = new test();
obj.callFunction(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)();
您可以使用私有函数数组:
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);
您可以使用私有函数数组:
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);
obj.callFunction0;没有定义。返回函数[索引];需要返回funcs[index]@Asad:No.obj.callFunction0;未定义,因为funcs中没有函数返回值。如果只有return funcs[index];,然后您只返回对函数的引用,您必须像obj.callFunction0一样调用;编辑:刚刚看到你的答案,我猜OP会选择他最喜欢的。但是callFunction这个名字表明这个函数实际上应该调用另一个函数,而不仅仅是返回一个引用。我错过了这个私有部分。回答得好@Asad-返回函数而不是调用函数。问题似乎是试图调用函数。@FelixKling是的,它未定义,因为函数没有返回值。我认为OP希望返回函数,并通过执行obj.callFunction0选择性地调用它们;为什么你认为这更糟;没有定义。返回函数[索引];需要返回funcs[index]@Asad:No.obj.callFunction0;未定义,因为funcs中没有函数返回值。如果只有return funcs[index];,然后您只返回对函数的引用,您必须像obj.callFunction0一样调用;编辑:刚刚看到你的答案,我猜OP会选择他最喜欢的。但是callFunction这个名字表明这个函数实际上应该调用另一个函数,而不仅仅是返回一个引用。我错过了这个私有部分。回答得好@Asad-返回函数而不是调用函数。问题似乎是试图调用函数。@FelixKling是的,它未定义,因为函数没有返回值。我认为OP希望返回函数,并通过执行obj.callFunction0选择性地调用它们;你为什么认为那更糟?那他们就不再是私人的了。这也与范围无关。@Quentin我通常将其称为范围。这不对吗?是的。这就是背景。作用域是函数及其父函数的一个因素,这样它们就不再是私有的了。这也与范围无关。@Quentin我通常将其称为范围。这不对吗?是的。这就是背景。范围是函数及其父函数的一个因素。