欢迎探讨,原文出处
http://www.asarea.cn/showdiary.jsp?id=141
按照常理,所谓事件机制是指不同的对象之间相互进行消息传递通讯的一种处理方法。譬如我发短信给你,消息的两端是我和你,而这个事件就是短信。通常情况下这个消息由一个消息处理中心统一进行处理分发,类似于邮局发信。
常规来说,这个事件应该有两个属性,一个是发出者,一个是接收者。发出者只管发送,而接收者要负责接收并做出回应也就是处理。
As3中的事件不是这样的,其消息也就是EVENT有一个属性叫target,不要混淆,对于我发送短信给你这个例子,target居然不是你,而是我,添加事件侦听addeventlistener的居然是我不是你。
其实应该这么理解,消息分很多种,一种是某对象主动发出的非界面人机交互事件,一种是人机交互事件,譬如鼠标单击等。这两类事件最大的区别是主动和被动,第一种事件有一个明确的主动的发出者,但该发出者并不就是事件接收者,而第二种事件有一个明确的接受者,但该接收者可以认为是被迫的事件发出者。
而as3种并没有对这两类事件进行区分,所以对于对第二种事件来说,这种机制是很实用的,就是事件的接收者就是被迫的事件发出者,譬如鼠标单击某元件A,A自然被迫发出一个被单击事件,事件的目标target就是A,也就是事件的接收者也就是A(指一般情况下,不考虑as3提供的事件流机制)。
但是对于某个主动事件发出者,这种机制就显得有些唐突了,我发出一个事件,结果这个事件的target居然就是我自己,有些难以理解。但是考虑as事件机制主要用于人机交互,主要用于被动事件,我被加到舞台上,我被单击,我被激活。。。
对于as中的主动发出事件(特别是我们自己定义的事件),一般都是这样处理,譬如A发出事件,目标其实应该是B,我们就把这个事件的处理函数func放在B中,而在A中addEventListener(B.func),总之有些不爽。