何时扩展EventDispatcher

Fly*_*Cat 2 apache-flex flash events dispatcher actionscript-3

简单的问题..我想知道你们什么时候在课堂上扩展EventDispatcher.在我看来,只要我们有导入事件包,我们可以没有问题调度事件....我看到有人在他们的课程中扩展EventDispatcher ...不知道为什么......有人在意解释?太感谢了...

Jer*_*rth 8

我认为你可能会混淆AS3中的许多对象在继承树中将EventDispatcher扩展得更高的事实,只需要导入flash.events包以便分派事件.例如,许多DisplayObject类扩展了EventDispatcher.以下是几个例子:

Shape » DisplayObject » EventDispatcher » Object

Sprite » DisplayObjectContainer » InteractiveObject » DisplayObject » EventDispatcher » Object
Run Code Online (Sandbox Code Playgroud)

通常我会在每次使用自定义类时扩展EventDispatcher,该类只需要与其范围之外的对象进行通信,这些对象的某些内部属性已更改或某些函数正在发生.这是一个例子:

public class Clock extends EventDispatcher
{
     protected var _tick:uint;

     protected function run():void
     {
         if( _tick + 1 > 60 ) {
             _tick = 0;
         } else {
             _tick++;
         }
         dispatchEvent( new Event( Event.CHANGE ) );
     }

     public function getTick():uint { return _tick; }
}
Run Code Online (Sandbox Code Playgroud)

有时保持对象的内部细节只读是"重要的".在上面的示例中,当run()调用该方法时,Clock该类执行一些内部逻辑,然后调度指示某些内容已更改的事件.任何正在侦听该事件的类都可以调用public getTick()方法来查找该值_tick.这隐藏了实现并保护_tick变量不被外部类更改,同时提供了Clock可以读取的接口.