Создание анонимных функций в цикле с разными аргументами - PullRequest
10 голосов
/ 25 декабря 2010

Я хочу сделать в цикле набор кнопок и добавить к ним некоторые события, но анонимные функции - это то же самое.Я пишу пример кода:

for(var i:int=0;i<5;i++)
{
    var button:SimpleButton = new SimpleButton(...);
    ...
    button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void
    {
        trace(i);
    });
}

...

И я хочу отследить 0,1,2,3 .. от кнопок нажатия вместо 4,4,4,4 .. Вы знаете, как я могу сделать это

1 Ответ

19 голосов
/ 25 декабря 2010

Проблема, с которой вы сталкиваетесь, заключается в том, что ActionScript не поддерживает замыкания.

Другими словами, переменная i не копируется в свой контекст для каждой функции.Все функции ссылаются на один и тот же экземпляр i.

. Дополнительная информация здесь: http://flex.sys -con.com / node / 309329

.вам нужна функция, которая генерирует функцию:

public function makeFunction(i:int):Function {
    return function(event:MouseEvent):void { trace(i); }
}

Теперь вы создаете новые экземпляры функции с собственным контекстом:

button.addEventListener(MouseEvent.CLICK, makeFunction(i));
...