| [1.事件处理机制] AS2 的事件处理机制并不完美.形态多样.不易于管理.在这里可以解决此问题的一半.本文会先了解和使用AS2 中基本的事件处理机制.然后建立强大的事件处理机制.来方便管理自己的程序.下面讲解.
 形态多样的事件处理机制(后面会详细的讲解):1.回调函数.(如 onLoad, onHTTPStatus 等)
 2.使用 addListener 方法. (如 onLoadStart, onLoadInit 等)
 3.使用 addEventListener 方法. (如 click, change 等)
 它们的作用域和形态(代码):作用域是指标识符(如常量、数据类型、变量或例程)在程序内可被引用的范围.
 1.this 指向触发此事件的对象
 object.onLoad = function(){
 trace(this); //输出: object
 }
 2.this 指向侦听器对象
 var listenerObject:Object = {};listenerObject.onLoadStart = function()
 {
 trace(this); //输出: listenerObject
 }
 broadcasterObject.addListener(listenerObject);
 3.使用侦听器对象:this 指向侦听器对象
 var listenerObject:Object = {};listenerObject.click = function(evt:Object)
 {
 trace(this); //输出: listenerObject
 }
 broadcasterObject.addEventListener("click", listenerObject);
 使用函数:this 指向触发此事件的对象
 function clickHandler(evt:Object):Void{
 trace(this); //输出: broadcasterObject
 }
 broadcasterObject.addEventListener("click", clickHandler);
 
 有时我们需要更改它们的作用域怎么办?
 想要改变它们的作用域,需使用 Delegate 类的 create 方法.
 此类的全路径: mx.utils.Delegate;
 用法: Delegate.create(要运行函数的范围, 函数);
 例:
 1.this 指向 _level0
 import mx.utile.Delegate;object.onLoad = Delegate.create(this, _onLoad);
 function _onLoad():Void
 {
 trace(this); //输出: _level0
 }
 2.this 指向 _level0
 import mx.utile.Delegate;var listenerObject:Object = {};
 listenerObject.onLoadStart = Delegate.create(this, loadStart);
 function loadStart():Void
 {
 trace(this); //输出: _level0
 }
 broadcasterObject.addListener(listenerObject);
 3.
 使用侦听器对象:this 指向 _level0
 import mx.utile.Delegate;var listenerObject:Object = {};
 listenerObject.click = Delegate.create(this, clickHandler);
 function clickHandler(evt:Object)
 {
 trace(this); //输出: _level0
 }
 broadcasterObject.addEventListener("click", listenerObject);
 使用函数:this 指向 _level0
 function clickHandler(evt:Object):Void{
 trace(this); //输出: _level0
 }
 broadcasterObject.addEventListener("click", Delegate.create(this, clickHandler));
 事件对象:
 它包含两个基本属性:
 type:String              事件名.
 target:Object       事件源.此属性可以不指定,默认为事件源(调用dispatchEvent方法的对象).
 此对象传递给 EventDispatcher 类的 dispatchEvent 方法并作为参数传递到侦听器.
 例:
 //发送事件.dispatchEvent({type:"click", target:this});
 //事件处理函数.
 function clickHandler(evt:Object):Void
 {
 trace([evt.type, evt.target]);
 }
 //添加事件侦听器.
 addEventListener("click", clickHandler);
 下一节讲:[2.创建类库] 经典论坛讨论:http://bbs.blueidea.com/thread-2768209-1-1.html
 出处:蓝色理想
责任编辑:蓝色月光
 上一页 [AS2]事件处理机制 -- 目录 下一页 [AS2]事件处理机制 -- 创建类库 ◎进入论坛Flash专栏版块参加讨论
	      |