AS3 - вопрос о привязке символов - PullRequest
2 голосов
/ 20 апреля 2011

Я новичок в AS3 и не могу понять, почему этот цикл ведет себя не так, как должен.

for each (var s in [_set, _set.otherSet]) {
  for each (var f in [s.frame_top_mc, s.frame_bottom_mc]) {
    f.addEventListener(MouseEvent.CLICK, function( ):void {
      _score[f.category] += 1;
      madeSelection(f);
    });
  }
}

Как я могу дать каждой анонимной функции ссылку на каждуюобъект, представленный f, а не простая ссылка на f каждый раз?

В частности, почему каждая копия анонимной функции привязывается к одной ссылке на f?Как (я должен сказать, почему) именно AS3 отличается от JavaScript в этом отношении?

1 Ответ

2 голосов
/ 20 апреля 2011

Это должно быть так:

for each (var s in [_set, _set.otherSet]) {
  for each (var f in [s.frame_top_mc, s.frame_bottom_mc]) {
    f.addEventListener(MouseEvent.CLICK, function( e:MouseEvent ):void {
      _score[e.currentTarget.category] += 1;
      madeSelection(e.currentTarget);
    });
  }
}

Проблема в том, что ваше замыкание закрывается самой переменной цикла f , а не каждая вещь f используется для ссылки в цикле. После завершения цикла f остается ссылкой на последнюю вещь в списке, который вы зациклили. f не разыменовывается при создании замыкания, а при его выполнении.

...