首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Event.clone和Event.toString示例?

Event.clone和Event.toString示例?
EN

Stack Overflow用户
提问于 2011-08-20 14:04:30
回答 3查看 751关注 0票数 2

有没有人能或多或少地提供一些真实的例子,说明你什么时候想要实际使用Event类的这两个方法?

因为3让我们在任何扩展Event的自定义类中覆盖这些方法,但我想知道为什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-20 15:44:47

toString -我只在调试消息中使用它,但在这些情况下,如果你不覆盖toString,那么你将不能返回事件的字符串表示。考虑以下示例,其中使用单个处理程序来捕获各种事件类型:

代码语言:javascript
运行
复制
function handleEvents(evt:*):void
{
    //trace the event type and all parameters including extra parameters from custom events
    trace(evt.toString()); 
}

clone -如果需要重新分派事件,将调用事件类的clone方法。这将返回一个新的事件对象,并将目标重新分配给新的调度对象。问题是,如果不覆盖clone方法,clone将从定义它的最后一个类创建一个新的event对象,而不是从您的自定义event类创建。当您捕获重新调度的事件时,这很可能会导致类型错误。

票数 3
EN

Stack Overflow用户

发布于 2011-08-20 16:11:42

补充一下shanethehat的toString解释,如果你不覆盖toString并跟踪事件,它将总是打印通用Event的默认信息,因为它是你的自定义事件的子类化。

重写toString是用来调试的,所以它不是必要的,尽管它是鼓励的,特别是如果你正在分发你的API,与其他开发人员合作,或者只是想要写干净,一致的代码。

根据自定义事件中的属性数量,您可以创建一个switch语句,以便toString只为每种类型返回适当的事件属性。下面是我的HistoryEvent类中的一个示例:

代码语言:javascript
运行
复制
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;
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2011-08-20 15:14:14

我从来没有重写过它们,只要有必要,我总是使用自定义事件?

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7130048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档