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

vvvvvvf 03.07.2009 02:58

Какой стиль объявления событий используете вы?
 
Доброго времени суток.
Я тут поглядел исходники(as3) различных проектов и обнаружил различные стили объявления событий.

Выделю основные три стиля объявления:

Первый самый короткий, объявлять функции прямо в листенере:
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
                public function Main():void {
                        addEventListener(MouseEvent.CLICK, function(e:*) {
                                trace('click');
                        });
                }
        }
}

второй объявлять функцию внутри метода класса:
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
                public function Main():void {
                        addEventListener(MouseEvent.CLICK, myClick);
                        function myClick(e:*):void {
                                trace('click');
                        }
                }
 
        }
}

и третий объявлять функцию как отдельный метод класса:
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
                public function Main():void {
                        addEventListener(MouseEvent.CLICK, myClick);
                }
                public function myClick(e:*):void {
                        trace('click');
                }
        }
}

а какой способ используете вы и какой на ваш взгляд является самым верным?

Molecula 03.07.2009 03:06

Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
                public function Main():void {
                        super();
                        super.addEventListener(MouseEvent.CLICK, this.myClick);
                }
                public function myClick(e:MouseEvent):void {
                        trace('click');
                }
        }
}


etc 03.07.2009 07:42

Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
 
                public function Main() {
                        super();
                        super.addEventListener(MouseEvent.CLICK, this.handler_click);
                }
 
                /**
                * @private
                */

                private function handler_click(event:MouseEvent):void {
                        trace('click');
                }
        }
}


twix1124 03.07.2009 08:57

Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
                public function Main():void {
                        super();
                        super.addEventListener(MouseEvent.CLICK, this.myClick);
                }
                public function myClick(e:MouseEvent):void {
                        trace('click');
                }
        }
}


Smirnov48 03.07.2009 10:07

А зачем addEventListener у super? Ведь если его просто пишешь - тоже катит.

MonkDead 03.07.2009 10:08

Код AS3:

package 
{
 
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite
        {
 
                public function Main()
                {
                        super();
                        super.addEventListener(MouseEvent.CLICK, this.onClick);
                }
 
                private function onClick(event:MouseEvent = null):void
                {
                        trace("click");
                }
        }
}

Странно что все кроме __etc, пишут что конструктор что-то возвращает :).
Код AS3:

public function Main():void

Вообще то он ничего не возвращает!

etc 03.07.2009 10:12

Цитата:

Сообщение от Smirnov48 (Сообщение 832880)
А зачем addEventListener у super? Ведь если его просто пишешь - тоже катит.

Можете не писать.

Smirnov48 03.07.2009 10:19

Спасибо. :) Вот меня и на сторожило - то что я обычно не пиши. Не super() не this. Вот и хотелось бы узнать - зачем? Или покрайней мере логику почему вы так пишете. Вдруг если их не писать баги полезут.

etc 03.07.2009 10:24

Дабы не повторяться:
http://www.flasher.ru/forum/showthread.php?t=126668
(начиная с какого-то там поста)

DeliMIter 03.07.2009 11:43

Цитата:

Сообщение от Smirnov48 (Сообщение 832885)
Вдруг если их не писать баги полезут.

Вызов метода через super однозначно указывает, что следует вызывать метод в суперклассе, даже если этот метод переопределён в текущем классе.

Обращение к полю или методу через this однозначно указывает на использование полей текущего объекта, ибо без указания контекста в доступных областях видимости могут оказаться переменные с такими же именами, например:

Код AS3:

class XXX extends MovieClip
{
        public finction moveTo(x:Number, y:Number):void
        {
                this.x = x;
                this.y = y;
        }
}

Иногда явное указание контекстов this и super является превентивным стилем написания кода, который позволяет избежать случайного возникновения проблем, вытекающих как из упомянутых выше, так и не упомянутых вовсе, особенностей AS3.


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

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