我最近开始使用createjs并且遇到了这个问题(它与createjs没什么关系):
for (a in ship.weapon) {
//code
button[a].addEventListener("click", function() {
ship.weapon[a].amount = ship.weapon[a].amount.plus(1);
});
//code
}
" a"按下按钮时的变量将是ship.weapon数组的长度。那我怎么做才能让#34; a"在click函数内部将保持for循环的值?
答案 0 :(得分:4)
您可以使用闭包来冻结a
值
for (a in ship.weapon) {
(function(index) {
button[index].addEventListener("click", function() {
ship.weapon[index].amount = ship.weapon[index].amount.plus(1);
});
})(a); // calls the function I just defined passing 'a' as parameter
}
答案 1 :(得分:0)
你必须使用一个函数,没有别的办法。
function addEvent(a) {
//code
button[a].addEventListener("click", function() {
ship.weapon[a].amount = ship.weapon[a].amount.plus(1);
});
//code
}
for (var a in ship.weapon) {
addEvent(a);
}
这样可行。