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 是您所期望的。