Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как получить переменную внутри функции обработчика события? (http://www.flasher.ru/forum/showthread.php?t=127225)

DeliMIter 09.07.2009 18:24

Цитата:

Сообщение от Smrad (Сообщение 834309)
Зачем добавлять в язык ненужные возможности?

Предположу, что для поддержания ECMA-стандарта, на котором основан AS3.

Smrad 09.07.2009 19:05

Цитата:

Сообщение от DeliMIter (Сообщение 834315)
Предположу, что для поддержания ECMA-стандарта, на котором основан AS3.

Надо полагать, что в ECMA анонимные функции попали по ошибке ;).

DeliMIter 09.07.2009 19:17

Есть конструктивное предложение не холиварить. Про "нужна или не нужна" я пошутил.

Есть вещи, которые можно сделать тем или иным способом, и некоторые из этих способов я не использую, потому что их логика, с моей точки зрения, отличается от логики остального языка. То вышеупомянутые анонимные функции, интервалы и таймауты, а в AS2 были ещё и микс-ины, бродкастер и доступ к как бы приватным свойствам через [].

Если разработчик понимает, что он делает, зачем, и как оно работает, это его личное дело (например, кажется, silin - большой любитель адских микс-инов в AS2), но вот давать такие примеры новичку, имхо, это бэд, очень бэд. Человек и так ещё не понимает, что такое область видимости, контекст, и т.д., а тут ему ещё и подсовывают нечто, требующее на два порядка более высокий уровень знаний.

MoHaX 09.07.2009 19:26

Сама задача весьма стрранно рещается.
зачем запускать 10 таймеров на 1 секунду.
достаточно запустить 1 таймер, и в его обработчике сделать цикл.

динамические классы, зло.

dimarik 09.07.2009 19:36

Цитата:

Сообщение от MoHaX (Сообщение 834336)
Сама задача весьма стрранно рещается.
зачем запускать 10 таймеров на 1 секунду.
достаточно запустить 1 таймер, и в его обработчике сделать цикл.

динамические классы, зло.

один таймер - много подписчиков. смысл тогда в диспетчере? зачем здесь циклы?

Smrad 09.07.2009 19:41

Цитата:

Сообщение от DeliMIter (Сообщение 834332)
Есть конструктивное предложение не холиварить. Про "нужна или не нужна" я пошутил.

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

dimarik 10.07.2009 02:34

Цитата:

Сообщение от BlooDHounD (Сообщение 834217)

Забавно, но при таком раскладе есть runtime error
Код AS3:

import flash.events.EventDispatcher;
function test():Function {
        return function(event:Event, whatever:Object):uint {
                trace(event, whatever);
                return 0;
        }
}
var dispatcher = new EventDispatcher();
dispatcher.addEventListener( 'test', test() );        // не всё окей
dispatcher.dispatchEvent( new Event( 'test' ) );


BlooDHounD 10.07.2009 02:53

dimarik, тем болие тупо.

dimarik 10.07.2009 03:02

Не ожидал, что в два часа ночи проснешься =)

По существу. Согласен с пунктом про сигнатуру анонимной функции. Она отсутствует на этапе компиляции для компилятора. А виртуальная машина ведет себя на анонимных функциях довольно странно. Поясню. В примере Блуда анонимная функа не принимала ни одного аргумента, добавив в неё два или более аргументов, получаем runtime error "Invalid arguments count"

MoHaX 10.07.2009 15:18

Код AS3:

package {
        import flash.events.TimerEvent;
        import flash.utils.Timer;               
 
        public class Test {
                private var timer : Timer;
                private var array : Array;
 
                public function Test() {
 
                        initArray();
 
                        timer = new Timer(1000);
                        timer.addEventListener(TimerEvent.TIMER, onTick);
                }
 
                private function initArray() : void {
                        array = new Array();
                        for (var i : uint = 0; i < 5; i++) {
                                var obj : Object = new Object();
                                obj["id"] = i;
                                array.push(obj);
                        }
                }
 
                private function onTick(event : TimerEvent) : void {
                        for (var i : uint = 0; i < array.length; i++) {
                                trace(array[i].id);
                        }
                }
        }
}



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

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