[面试最爱问的问题1]Flex/AS3的事件机制
July 19th, 2010
No comments
今天静下心来看了几篇as3事件机制的教程,终于整明白这个面试中最爱问的问题了,嘎嘎!
具体场景描述如下
容器深度:Application->Canvas->HBox->Button;
其中在HBox这个容器中有段代码
button.addEventListener(MouseEvent.Click,onButtonClickHandler);
阶段0:触发阶段,事件被触发,场景中的情况就是用户点击了Button,翻译为代码就是Button中执行了“ dispatch(new MouseEvent(MouseEvent.Click));”大家可以看下Event类中有个target的属性,这个属性就记录着Button这一事件发起者的对象
阶段1:捕获阶段,一旦有事件被触发,FP则会带着这个Event对象从整个程序的最上层开始往下遍历 ,顺序为Application->Canvas->HBox->Button,不停地匹配Event里面中的Target对象和当前遍历到的容器或是组件是不是为同一个对象
阶段2:目标阶段,终于在HBox这个容器中发现到了Button和Event中Target所指向的对象是同一个,ok,事件触发者Button终于被我挨家挨户的排查中找着了。
阶段3:冒泡阶段,从捕获到的目标Button,开始自下而上得往一级级parent走,看看到底是谁会关心Button被用户点击了。
于是再一级级往上HBox->Canvas->Application;果然在遍历到HBox的时候发现它曾经为Button的Click事件加过监听。
阶段4:执行阶段,事件的关心者HBox也找到了,那么执行onButtonClickHandler这个函数即可。
