何时扩展EventDispatcher

时间:2010-08-08 21:05:43

标签: flex flash actionscript-3 events dispatcher

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

1 个答案:

答案 0 :(得分:8)

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

Shape » DisplayObject » EventDispatcher » Object

Sprite » DisplayObjectContainer » InteractiveObject » DisplayObject » EventDispatcher » Object

通常我会在每次使用自定义类时扩展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()方法时,Clock类执行一些内部逻辑,然后调度指示某些内容已更改的事件。然后,任何正在侦听该事件的类都可以调用公共getTick()方法来查找_tick的值。这隐藏了实现并保护_tick变量不被外部类更改,同时提供了一个可以读取Clock的接口。