javascript 循环覆盖 createjs 对象
javascript loop overwriting createjs object
我有这段代码(我已将其剥离为基础)
for (var i = 0, len = 26; i < len; i++) {
var chr = String.fromCharCode(65 + i);
var letter_container = new createjs.Container();
letter_container.chr = chr;
letter_container.addEventListener("mouseover", function(event) {
console.log(letter_container.chr);
});
}
所以这显然循环了字母表并为字母表中的每个字母创建了一个对象。我想要它,这样当我将鼠标悬停在容器上时(为了清楚起见,我已经取出了实际的按钮图形)它会输出我悬停的字符。
在这种情况下,无论我将鼠标悬停在哪个字母上都会输出 Z。
如何让每个对象都独一无二?
简而言之,JavaScript 函数范围...
每次循环 letter_container
都会更新,并且在任何 mouseover
事件触发时 chr
== Z
.
最好的解决方法是将循环的内容包装在一个函数中,因此。
for (var i = 0, len = 26; i < len; i++) {
(function(chrCode){
var chr = String.fromCharCode(65 + i);
var letter_container = new createjs.Container();
letter_container.chr = chr;
letter_container.addEventListener("mouseover", function(event) {
console.log(letter_container.chr);
});
})(i);
}
这将保留容器,以便 letter_container
是您所期望的。
我有这段代码(我已将其剥离为基础)
for (var i = 0, len = 26; i < len; i++) {
var chr = String.fromCharCode(65 + i);
var letter_container = new createjs.Container();
letter_container.chr = chr;
letter_container.addEventListener("mouseover", function(event) {
console.log(letter_container.chr);
});
}
所以这显然循环了字母表并为字母表中的每个字母创建了一个对象。我想要它,这样当我将鼠标悬停在容器上时(为了清楚起见,我已经取出了实际的按钮图形)它会输出我悬停的字符。
在这种情况下,无论我将鼠标悬停在哪个字母上都会输出 Z。
如何让每个对象都独一无二?
简而言之,JavaScript 函数范围...
每次循环 letter_container
都会更新,并且在任何 mouseover
事件触发时 chr
== Z
.
最好的解决方法是将循环的内容包装在一个函数中,因此。
for (var i = 0, len = 26; i < len; i++) {
(function(chrCode){
var chr = String.fromCharCode(65 + i);
var letter_container = new createjs.Container();
letter_container.chr = chr;
letter_container.addEventListener("mouseover", function(event) {
console.log(letter_container.chr);
});
})(i);
}
这将保留容器,以便 letter_container
是您所期望的。