之前我没有使用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类实现。
我哪里出错?
答案 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。