DFdou's Blog Life is short,Be yourself.

202/100

AS3 – dispatchEvent()

忽然想说下dispatchEvent(),这谈到dispatchEvent()就要提起EventDispatcher:

包 flash.events
类 public class EventDispatcher
继承 EventDispatcher Object
实现 IEventDispatcher
子类 Animator, Camera, ContextMenu, ContextMenuItem, DataProvider, DisplayObject, FileReference, FileReferenceList, IME, LoaderInfo, LocalConnection, Locale, Microphone, NetConnection, NetStream, PrintJob, RadioButtonGroup, SharedObject, Socket, Sound, SoundChannel, StyleSheet, Timer, Transition, TransitionManager, Tween, URLLoader, URLStream, XMLSocket

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

EventDispatcher 类实现 IEventDispatcher 接口,并且是 DisplayObject 类的基类。 EventDispatcher 类允许显示列表上的任何对象都是一个事件目标,同样允许使用 IEventDispatcher 接口的方法。
事件目标是 Flash ® Player 事件模型的重要组成部分。 事件目标是事件如何通过显示列表层次结构这一问题的焦点。 当发生鼠标单击或按键等事件时,Flash Player 会将事件对象调度到从显示列表根开始的事件流中。 然后该事件对象在显示列表中前进,直到到达事件目标,然后从这一点开始其在显示列表中的回程。 在概念上,到事件目标的此往返行程被划分为三个阶段:捕获阶段包括从根到事件目标节点之前的最后一个节点的行程,目标阶段仅包括事件目标节点,冒泡阶段包括回程上遇到的任何后续节点到显示列表的根。

通常,使用户定义的类能够调度事件的最简单方法是扩展 EventDispatcher。 如果无法扩展(即,如果该类已经扩展了另一个类),则可以实现 IEventDispatcher 接口,创建 EventDispatcher 成员,并编写一些简单的挂钩,将调用连接到聚合的 EventDispatcher 中。

所有实现了IEventDispatcher接口的对象,都可以dispatchEvent()事件,EventDispatcher的所有子类自然也是。

那么dispatchEvent()是干嘛用的呢?

dispatchEvent () 方法
public function dispatchEvent(event:Event):Boolean

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

将事件调度到事件流中。 事件目标是对其调用 dispatchEvent() 方法的 EventDispatcher 对象。

参数 event:Event — 调度到事件流中的 Event 对象。 如果正在重新调度事件,则会自动创建此事件的一个克隆。 在调度了事件后,其 target 属性将无法更改,因此您必须创建此事件的一个新副本以能够重新调度。

返回 Boolean — 如果成功调度了事件,则值为 true。 值 false 表示失败或对事件调用了 preventDefault()。
引发 Error — 已达到事件调度递归限制。

简单的说,就是发送事件用的,通常情况下只有在发送自定义事件的时候才会用到dispatchEvent()啦,很多时候为了代码的可读性,也需要一些自定义事件啦。