我有这样的功能。
function myfun(input1, input2, input3){
//
// Other codes which deals with input2 and input3 (irrelevant)
//
function a(){
console.log('func a');
}
function b(){
console.log('func b');
}
function c(){
console.log('func c');
}
function d(){
console.log('func d');
}
// input1 is an array
for(var i=0; i<input1.length; i++){
var name = input1[i];
name(); // Doesn't work as 'name' refers to a string;
this[name](); // Doesn't work;
// How can i execute the nested function whose name is stored in input array ?
}
}
myfun(['b','d'], 'foo', 'bar');
如何调用名称在input1数组中给出的嵌套函数?
谢谢。
答案 0 :(得分:3)
修改强>
正如@Felix建议的那样,有一种更好的方法(就效率而言) -
var myfun = (function () {
var util = {
a: function (){
console.log('method a');
},
b: function (){
console.log('method b');
},
c: function (){
console.log('method c');
},
d: function (){
console.log('method d');
}
};
return function (input1, input2, input3) {
for(var i=0; i<input1.length; i++){
var name = input1[i];
util[name]();
}
};
}());
myfun(['b','d'], 'foo', 'bar');
这样,util
对象将只构造一次,其中以前一种方式每次调用myfun
时都会构造对象。
但请注意,在这种情况下,内存占用量将大于前一个内存占用量,因为对util
的引用将因为关闭而始终存储在内存中。
不是创建内部函数,而是尝试使用方法创建对象 -
function myfun(input1, input2, input3){
var util = {
a: function (){
console.log('method a');
},
b: function (){
console.log('method b');
},
c: function (){
console.log('method c');
},
d: function (){
console.log('method d');
}
};
for(var i=0; i<input1.length; i++){
var name = input1[i];
util[name]();
}
}
myfun(['b','d'], 'foo', 'bar');
答案 1 :(得分:0)
编辑:
您必须使函数成为对象的成员。
var funcFactory = {
a:function(){
console.log('func a');
},
b:function(){
console.log('func b');
},
c:function(){
console.log('func c');
},
d:function(){
console.log('func d');
},
call:function(input1, input2, input3){
for(var i=0; i<input1.length; i++){
var name = input1[i];
this[name](); // Doesn't work;
}
}
}
funcFactory.call(['b','d'],foo,bar);
答案 2 :(得分:0)
替换名称(); with eval(name +'()');