Примеры Event.clone и Event.toString? - PullRequest
2 голосов
/ 20 августа 2011

Может ли кто-нибудь предоставить более или менее реальные примеры того, когда вы, возможно, захотите использовать эти два метода класса Event?

AS 3 заставляет нас переопределять эти методы в любом пользовательском классе, который расширяетСобытие, но мне интересно, почему.

Ответы [ 3 ]

3 голосов
/ 20 августа 2011

toString - Я использую это только в сообщениях отладки, но в этих случаях, если вы не переопределите toString, вы не сможете вернуть строковое представление вашего события.Рассмотрим этот пример, где один обработчик используется для перехвата различных типов событий:

function handleEvents(evt:*):void
{
    //trace the event type and all parameters including extra parameters from custom events
    trace(evt.toString()); 
}

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

2 голосов
/ 20 августа 2011

добавление к объяснению toString shanethehat, если вы не переопределите toString и не отследите событие, оно всегда будет выводить информацию по умолчанию для общего Event, поскольку именно это ваше пользовательское событие подклассов.1005 * переопределение toString используется для отладки, поэтому в этом нет необходимости, хотя это рекомендуется, особенно если вы распространяете свой API, работаете с другими разработчиками или просто хотите написать чистый, согласованный код.

в зависимости отколичество свойств в вашем пользовательском событии, вы можете создать оператор switch так, чтобы toString возвращал только соответствующие свойства события для каждого типа.Вот пример этого из моего HistoryEvent класса:

package com.mattie.events
{
    //Imports
    import flash.events.Event;

    //Class
    public class HistoryEvent extends Event
    {
        //Constants
        public static const CHANGE:String = "change";
        public static const STATUS:String = "status";

        //Variables
        public var action:String;
        public var name:String;
        public var data:Object;
        public var undoable:Boolean;
        public var undoableName:String;
        public var redoable:Boolean;
        public var redoableName:String;
        public var index:uint;

        //Constructor
        public function HistoryEvent(type:String, action:String = null, name:String = null, data:Object = null, undoable:Boolean = false, undoableName:String = null, redoable:Boolean = false, redoableName:String = null, index:uint = 0) 
        {
            super(type);

            this.action = action;
            this.name = name;
            this.data = data;
            this.undoable = undoable;
            this.undoableName = undoableName;
            this.redoable = redoable;
            this.redoableName = redoableName;
            this.index = index;
        }

        //Override clone
        override public function clone():Event
        {
            return new HistoryEvent(type, action, name, data, undoable, undoableName, redoable, redoableName, index);
        }

        //Override toString
        override public function toString():String
        {
            switch (type)
            {
                case CHANGE:    return formatToString("HistoryEvent", "type", "action", "name", "data");
                case STATUS:    return formatToString("HistoryEvent", "type", "undoable", "undoableName", "redoable", "redoableName", "index");
                default:        return null;
            }
        }
    }
}
0 голосов
/ 20 августа 2011

Я никогда не отменял их, и я всегда использую пользовательские события, когда это оправдано?

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