Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Расстановка обработчиков из цикла (http://www.flasher.ru/forum/showthread.php?t=96204)

chingachgoog 25.05.2007 14:41

Расстановка обработчиков из цикла
 
Есть много клипов mc1, mc2 ... mcN
Надо на них повесить обработчик.
Если делать так:
Код:

for (i=1; i<N; i++) {
    this["mc"+i].onPress=function(){
        trace(i)
    }
}

то при нажатии на любой из них будет показываться N, а не их номер (по идее i).
Т.е. флешка сохраняет динамичность кода в обработчике, подставляя туда не конкретное значение, а переменную i, которая по окончании цикла стала равной N.

Проблему можно решить так
Код:

trace(Number(this._name.slice(2)))
Но мне кажется, что можно как-нибудь проще и менее громоздко?

etc 25.05.2007 14:55

Код:

for (i=1; i<N; i++) {
    var mc = this['mc'+i];
    mc.i = i;
    mc.onPress=function(){
        trace(this.i)
    }
}


chingachgoog 25.05.2007 15:03

Действительно, так техничнее
Код:

for (i=1; i<N; i++) {
    this['mc'+i].i = i;
    mc.onPress=function(){
        trace(this.i)
    }
}

Спасибо.

etc 25.05.2007 15:07

Я привел рабочий код, а ты написал уже нерабочий, зачем? Переменная mc создается, чтобы по сто раз не писать this['mc'+i] (что, кстати, в цикле будет медленно работать), не говоря уже о читаемости кода.

chingachgoog 25.05.2007 15:19

Не понял.
В исходнике определение переменной находиться ВНУТРИ цикла.
var mc = this['mc'+i];
Где тут увеличение производительности?
И зачем по сто раз писать
this['mc'+i].i = i; когда в том и суть, что это пишется ОДИН раз?
Читаемость - это субъективно.
Для меня все var и прочие ":" менее читаемы.
Если вместо двух строк используется одна и сразу видно что к чему, то что более читаемо?
Ошибка лишь в пути обработчика:
не mc.onPress, а this['mc'+i].onPress - это и есть по СТО раз?

etc 25.05.2007 15:26

Ещё раз: твой приведенный код не будет работать. Он должен был быть таким:

Код:

for (i=1; i<N; i++) {
    this['mc'+i].i = i;
    this['mc'+i].onPress=function(){
        trace(this.i)
    }
}

Тут уже дважды будет this['mc'+i], ухудшающее читабельность и производительность (объявление переменной и обращение по ссылке быстрее, чем многократное прямое обращение, не говоря уже о читаемости).

chingachgoog 25.05.2007 15:31

Понял, если будет помимо onPress другие обработчики, то быстрее будет по ссылке.


Часовой пояс GMT +4, время: 16:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.