我不完全确定如何表达这个问题,但基本上,我有一个类,button
在其单击时应该调用传递给它的函数。
button = function(...,callBack) {
//...
this._cb = callBack;
}
button.prototype.callBack = function(e) {
//...
this._cb();
}
然后在其他地方
//on canvas click
e.target.callBack(e);
(我希望这是关于适当数量的背景,如果需要,我可以给予更多)
所以我遇到的问题是当我动态实例化按钮以使其回调使用数组中的数据时。即。
for (var i = 0; i < levels.length; i++) {
buttons[buttons.length] = new button(..., function() {drawLevel(levels[i])});
}
然后当他们被点击时,他们运行该回调代码并尝试为i找到一些随机值(可能是一个没有使用var
的for循环)并运行该级别。
我的问题是,我怎样才能(不使用eval)绕过这个问题。
谢谢!
答案 0 :(得分:2)
我不是100%清楚你要问的是什么,但看起来你将在你在循环中创建的匿名函数中获取错误的值(它总是水平的。长度)
这种方法是为每个创建的函数设置不同的范围,每个范围中的i都是循环中i的副本
buttons[buttons.length] = new button(..., (function(i){
return function() {drawLevel(levels[i])};
})(i));