AS3 - Определение функций внутри других функций - PullRequest
0 голосов
/ 17 февраля 2012

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

package
    {
        public class stuff extends Sprite
        {
            public function stuff()
            {
                minimizeBtn.addEventListener(MouseEvent.CLICK, minimizeOnClick);
                function minimizeOnClick(e:MouseEvent):void
                {
                       //do minimization stuff here
                }
            }
        }
    }

Тем не менее, существует явно другой способ определить его, как и любой другой метод класса. Примерно так:

 package
    {
        public class stuff extends Sprite
        {
            public function stuff()
            {
                minimizeBtn.addEventListener(MouseEvent.CLICK, minimizeOnClick);
            }

            internal function minimizeOnClick(e:MouseEvent):void
            {
                //do minimization stuff here
            }
        }
    }

Второй вариант может не иметь смысла, поскольку функция не является методом класса. Но меня беспокоит то, что первый метод будет использовать дополнительную память для каждого экземпляра класса. Какой самый эффективный и правильный способ сделать это, а также занимает ли первый метод дополнительную память или процессорное время для каждого экземпляра класса?

Спасибо!

1 Ответ

1 голос
/ 17 февраля 2012

Последний пример - правильный путь, и это правда, что вы должны попытаться инкапсулировать вашу addEventListener() и функцию прослушивания в соответствующем классе. В вашем случае вы можете подумать о создании класса для вашего minimizeBtn:

public class MinimizeButton extends SimpleButton
{

    public function MinimizeButton()
    {
        addEventListener(MouseEvent.CLICK, _onClick);
    }

    private function _onClick(e:MouseEvent):void
    {
        // do minimization stuff here
    }

}

MinimizeButton '_onClick() должен затем нацелиться на соответствующий экземпляр вашего класса stuff и запустить все, что stuff нужно сделать оттуда.

Процесс этого примера больше похож на:

MinimizeButton: «На меня нажали, я должен сообщить stuff, чтобы он мог сделать что-то важное».

Вместо:

stuff: «Я сижу и жду, пока не нажмут MinimizeButton, тогда я сделаю то, что требуется».

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