2

简单的问题..我想知道你们什么时候在课堂上扩展 EventDispatcher。在我看来,只要我们有导入事件包,我们就可以毫无问题地 dispatchEvent....我看到有时人们在他们的班级中扩展 EventDispatcher...不知道为什么...有人愿意解释吗?太感谢了...

4

1 回答 1

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可以读取的接口。

于 2010-08-08T21:37:08.793 回答