当前位置: 代码迷 >> Web前端 >> AS3.0事件侦听优先级确定的步骤是按顺序线性执行么
  详细解决方案

AS3.0事件侦听优先级确定的步骤是按顺序线性执行么

热度:149   发布时间:2012-10-06 17:34:01.0
AS3.0事件侦听优先级确定的方法是按顺序线性执行么

  AS3.0事件侦听优先级确定的方法是按顺序线性执行么?事后才觉得问这个问题挺白痴的(遭到同事鄙视。。。),脚本执行,不涉及资源加载和远程调用,哪来的异步呢。。。。

  结论是线性执行,不论优先级高的那个方法要执行多久,后面的都会等着,这也提醒我们某个事件处理逻辑和算法写得不要过于复杂,否则会耽误后面的侦听函数执行。所有的侦听函数都被放在EventDispatcher的一个listeners数组里,不过应该是private的,开debug模式强行输出可以看到一些内容。有兴趣的继续看吧:

  我被绕进去,是来源于这段话:“给一个对象注册多个监听器,即使每个监听器的优先级别不同,但也无法保证后一个执行时前面的监听函数已经执行完毕。设计时,后面的函数不应该以前者执行完毕为条件。”---来源于Flex学习笔记_08 Flex的事件机制_高级应用

测试代码如下:  

 public class TestEvent extends Sprite

? ? ? ? {
? ? ? ? ? ? ? ? private var num:Number = 0;
? ? ? ? ? ? ? ? public?function?TestEvent()
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? var testNum:int = 0;
? ? ? ? ? ? ? ? ? ? ? ? for(var i:int = 0; i < 1000000; i ++){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? testNum += i;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? trace("the final num is:" + testNum);
? ? ? ? ? ? ? ? ? ? ? ? initListener();
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? private function initListener():void{
? ? ? ? ? ? ? ? ? ? ? ? stage.addEventListener(MouseEvent.MOUSE_DOWN,func2,false,2);
? ? ? ? ? ? ? ? ? ? ? ? stage.addEventListener(MouseEvent.MOUSE_DOWN,func3,false,3);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? private function func2(event:MouseEvent):void{
? ? ? ? ? ? ? ? ? ? ? ? trace("when do fun2,the num is:"+num);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? private function func3(event:MouseEvent):void{
? ? ? ? ? ? ? ? ? ? ? ? trace("func3 begin,the num is:" + num);
? ? ? ? ? ? ? ? ? ? ? ? for(var i:int = 0; i < 1000000; i ++){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? num += i;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? trace("func3 complete,the num is:"+num);
? ? ? ? ? ? ? ? }
输出结果如下:
the final num is:1783293664
func3 begin,the num is:0
func3 complete,the num is:1783293664
when do fun2,the num is:1783293664

参考资料:

AS里事件到底是异步执行还是同步执行

  相关解决方案