在AS3中实现IEventDispatcher

时间:2011-06-03 01:29:36

标签: actionscript-3

之前我没有使用implements关键字,我一直在尝试使用它来实现IEventDispatcher类,看看是否允许我使用addEventListener()一个扩展Object的类(这是我对它的用途的理解 - 如果我错了,请纠正我。)

我的班级是这样的:

package
{
    import flash.events.Event;
    import flash.events.IEventDispatcher;

    public class Thing extends Object implements IEventDispatcher
    {
        public function Thing()
        {
            addEventListener(Event.ENTER_FRAME, _handle);
        }

        private function _handle(e:Event):void
        {
            trace('a');
        }
    }
}

但这引发了一堆错误:

  

1180:调用可能未定义的内容   方法addEventListener。
1044:   接口方法addEventListener in   命名空间   flash.events:IEventDispatcher没有   由Thing类实施    1044:界面方法   命名空间中的removeEventListener   flash.events:IEventDispatcher没有   由Thing类实施    1044:接口方法dispatchEvent   在命名空间   flash.events:IEventDispatcher没有   由Thing类实施    1044:界面方法   命名空间中的hasEventListener   flash.events:IEventDispatcher没有   由Thing类实施    1044:接口方法willTrigger in   命名空间   flash.events:IEventDispatcher没有   由Thing类实现。

我哪里出错?

2 个答案:

答案 0 :(得分:8)

要添加到jeremymealbrown的答案,Adobe提供了an example in the documentation

import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
import flash.events.Event;

class DecoratedDispatcher implements IEventDispatcher {       
    private var dispatcher:EventDispatcher;

    public function DecoratedDispatcher() {
        dispatcher = new EventDispatcher(this);
    }

    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
        dispatcher.addEventListener(type, listener, useCapture, priority);
    }

    public function dispatchEvent(evt:Event):Boolean{
        return dispatcher.dispatchEvent(evt);
    }

    public function hasEventListener(type:String):Boolean{
        return dispatcher.hasEventListener(type);
    }

    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
        dispatcher.removeEventListener(type, listener, useCapture);
    }

    public function willTrigger(type:String):Boolean {
        return dispatcher.willTrigger(type);
    }
}

答案 1 :(得分:4)

问题与错误消息一样。您没有实现IEventDispatcher接口中定义的方法。如果要使用实现,则必须显式定义接口中声明的函数。这意味着你实际上必须在你的班级中编写这些功能。另一方面,如果您不想实现自定义功能,则可以只扩展EventDispatcher。