function UpgradeShop(){
var selectedIndex;
var category_btns = [];
for(var i = 0; i < 5; i++){
category_btns[i] = new Button(38, 68 + i * 75, 284, 70);
category_btns[i].action = function() {
selectedIndex = i; // ?
draw_ui(); // ?
};
}
this.draw_ui = function(){
...
}
}
我有一个名为Button的自定义类,我想创建其中的5个。我给了他们每一个在检测到点击时执行的动作变量。
变量selectedIndex
以及方法draw_ui
可以在我声明这些函数的类中找到,不是 Button类。我注意到无法找到简单地调用draw_ui()
并且this.draw_ui()
尝试在Button类中找到该方法。如何断言函数调用和变量赋值是否定向到定义类?
答案 0 :(得分:2)
对于你问题的第一部分,请看这个答案:JavaScript closure inside loops – simple practical example因为这是一个非常常见的问题,这个问题已经被问了很多次(如果你不这么做的话,搜索并不总是很容易找到#39} ; t知道要搜索的内容。)
对于问题的第二部分,您需要将this
的值保存在这样的局部变量中:
function UpgradeShop(){
var selectedIndex;
var category_btns = [];
var self = this;
for(var i = 0; i < 5; i++){
(function(index) {
category_btns[index] = new Button(38, 68 + i * 75, 284, 70);
category_btns[index].action = function() {
selectedIndex = index;
self.draw_ui(); // use self here
};
})(i);
}
this.draw_ui = function(){
...
}
}