Actionscript 3 init () - PullRequest
       24

Actionscript 3 init ()

9 голосов
/ 30 октября 2009

Я часто видел init () в конструкторе классов AS3, иногда даже являясь единственным кодом в конструкторе. Почему это было бы полезно, если бы вы могли просто использовать саму функцию конструктора для инициализации класса?

package 
{

    import flash.display.Sprite;

    public class Example extends Sprite
    {

        public function Example()
        {
            init();                 
        }

        public function init ( ):void
        {

         //initialize here

        }

    }

}

Ответы [ 4 ]

16 голосов
/ 30 октября 2009

В ActionScript 3 код конструктора всегда интерпретируется, а не компилируется. Я считаю, что перемещение кода в функцию init () может позволить его скомпилировать и оптимизировать.

http://blog.pixelbreaker.com/flash/as30-jit-vs-interpreted/

6 голосов
/ 30 октября 2009

Причина, по которой я это сделал, состоит в том, что я могу повторно инициализировать класс, не создавая его новый экземпляр. Метод init () работает как кнопка сброса, если вы правильно ее кодируете, позволяя вам вернуть класс в его начальное состояние, например, позволяя любым установленным переменным оставаться установленными.

Конечно, в зависимости от того, как вы его кодируете.

3 голосов
/ 31 октября 2009

Другая причина может заключаться в том, что вам нужна ссылка на stage или родительский контейнер, и вы слишком ленивы, чтобы настроить слушатель ADDED_TO_STAGE. Затем вы должны сначала создать экземпляр класса, добавить его в контейнер и затем вызвать init(), как только он появится в списке отображения.

2 голосов
/ 16 февраля 2012

Программисты, плохо знакомые с AS3, часто испытывают проблемы со ссылкой на сцену (хорошо известная ситуация «ее там нет»).

Делая ...:

public function ClassName()
{
    super();
    addEventListener( Event.ADDED_TO_STAGE, init, false, 0, true );
}

private function init( event : Event ) : void
{
    removeEventListener( Event.ADDED_TO_STAGE, init );
    // Reference stage.stageWidth;
    // Call init after some sort of load completion initialized in the constructor
}

... это легко исправить.

Или иногда вы инициализируете загрузчик XML в конструкторе, а затем вызываете функцию initialize после завершения загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...