Просмотр полной версии : диспетчеризация собственного события в конструкторе
zzSpirit
15.04.2013, 08:28
Здравствуйте, такой вопрос:
Почему, если написать в конструкторе класса dispatchEvent(new Event('some event')); он событие не передает, а если написать в конструкторе dispEv(); и уже в функции написать саму диспетчеризацию - то все работает?
То есть вот так не работает:
public function MyClass():void
{
dispatchEvent(new Event('some event'));
}
А так работает:
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. Получается в случае необходимости естественная конструкция:
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-компиляцию и второй раз отрабаытвают быстрее, чем первый
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.