[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专栏版块参加讨论
|