Форум 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=197907)

zzSpirit 15.04.2013 08:28

диспетчеризация собственного события в конструкторе
 
Здравствуйте, такой вопрос:
Почему, если написать в конструкторе класса dispatchEvent(new Event('some event')); он событие не передает, а если написать в конструкторе dispEv(); и уже в функции написать саму диспетчеризацию - то все работает?

То есть вот так не работает:
Код AS3:

public function MyClass():void
                {
                        dispatchEvent(new Event('some event'));
                }

А так работает:
Код AS3:

public function MyClass():void
                {
                        dispEv();
                }
 
private function dispEv():void
                {
                        dispatchEvent(new Event('some event'));
                }

Хотя это по идее одно и то же...

Добавлено через 6 минут
А все, врубился...

caseyryan 15.04.2013 09:15

Конструктор не должен иметь никакого типа. Хоть в ас3 и простительно написать конструктору :void, многие другие языки этого не простят. Не нужно привыкать это делать.

zzSpirit 15.04.2013 10:12

А ну да, в принципе правильно, конструктор же возвращает объект - самого себя.
Спасибо, учту.
Тема оказалась не такой бесполезной)

mikhailk 15.04.2013 10:53

Собственно, для сложных объектов, которые сообщают наверх о своем состоянии, в конструкторе лучше вообще ничего не писать. Ничего, влияющего на логику работы.

Отдельно конструктор, отдельно - публичный метод init. Получается в случае необходимости естественная конструкция:

Код AS3:

var myObject:MyObject = new MyObject(); 
myObject.addEventListener(ApplicationEvents.OBJECT_READY,onMyObjectReady);
myObject.init();


caseyryan 15.04.2013 11:10

Собственно, а в чем вообще смысл отправки события из конструктора?
Событие то отправится, но отправится еще раньше, чем кто-либо успеет на него подписаться. Естественно обработчик не отреагирует. Да и зачем? Ведь после создания объекта уже ясно что конструктор отработал, и код, который был в нем выполнился. Смысл события сводится к нулю. Факт срабатывания конструктора уже можно считать подобным событием

gloomyBrain 15.04.2013 13:05

Цитата:

А ну да, в принципе правильно, конструктор же возвращает объект - самого себя.
Конструктор ничего не возвращает. Возвращает оператор new.

Цитата:

Собственно, для сложных объектов, которые сообщают наверх о своем состоянии, в конструкторе лучше вообще ничего не писать.
Это кстати очень правильное замечание. Конструкторы в AS3 по сути интерпретируются, а не компилируются на лету (JIT), как это происходит с методами объектов. Поэтому чем больше кода в конструкторе - тем сильнее это сказывается на скорости создания объекта. И сказывается каждый раз. Все остальные методы проходят JIT-компиляцию и второй раз отрабаытвают быстрее, чем первый


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

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