Javascript 你能从字符串数组中创建一组函数吗?

Javascript 你能从字符串数组中创建一组函数吗?,javascript,prototype-programming,Javascript,Prototype Programming,我该怎么做呢?是否需要使用新函数() var bunchofffunctionnames=[“函数”、“of”、“函数”]; 对于(var i=0;i

我该怎么做呢?是否需要使用新函数()

var bunchofffunctionnames=[“函数”、“of”、“函数”];
对于(var i=0;i
在re:i关于在函数创建循环中获取“i”值的评论中,问题是所有函数都将共享“i”。换句话说,在外部函数(循环所在的位置)中只有一个“i”变量,因此如果在创建的函数中引用“i”,那么它将无法正常工作(可能)。它们都会将“i”视为名称数组的“长度”,因为这就是循环结束时的长度

有几种方法可以解决这个问题。如果你的内心是一个方案程序员,你会这样做:

for (var i = 0; i < eventTypes.length; i++) {
    myObject.prototype[bunchOfFunctionNames[i]] = (function(copy_of_i) {
        return function() {
            // do some stuff, merrily referencing "copy_of_i"
        }
    })(i);
};
for(var i=0;i
循环中的“匿名”函数提供了一个新的作用域,因此,由于“i”是作为参数传入的(称为“copy_of_i”),即使我讨厌变量名中的下划线,实际函数使用它也是安全的。匿名函数返回实函数,因此该函数最终将出现在对象原型中

另一种选择是将匿名函数从循环中拉出:

function makeFunctionForName(i) {
  return function() {
    // do something, and now "i" is the parameter and "safe"
  };
}

for (var i = 0; i < eventTypes.length; i++) {
    myObject.prototype[bunchOfFunctionNames[i]] = makeFunctionForName(i);
}
函数makeFunctionForName(i){
返回函数(){
//做点什么,现在“i”是参数,“safe”
};
}
对于(var i=0;i
如果用
bunchofffunctionnames
替换
eventTypes
,这应该可以正常工作。它们不都是完全相同的函数吗?另外,请注意,如果需要在这些函数定义中引用变量“i”,则需要以不同的方式执行此操作。@Pointy,我如何在函数中读取i?好的,诀窍是所有这些函数都将从其外部作用域“共享”同一个变量“i”。我将提供问题的答案,因为在此处键入太难:-)另请参见:
function makeFunctionForName(i) {
  return function() {
    // do something, and now "i" is the parameter and "safe"
  };
}

for (var i = 0; i < eventTypes.length; i++) {
    myObject.prototype[bunchOfFunctionNames[i]] = makeFunctionForName(i);
}