问题:
在使用AS3中给相关事件绑定相关代码时候 我们一般使用
file.addEventListener(Event.COMPLETE,completeHandler);
其中completeHandler为事件触发调用的函数名称
但实际需求中更多不仅是要在事件发生时执行函数,也需要对该函数传递相关参数
file.addEventListener(Event.COMPLETE,
function(e:Event){
completeHandler(e,参数)
},false,0,true
);
一般取消方式
file.removeEventListener(Event.COMPLETE, completeHandler);
这样就能按需要把对象的文件上载完成事件注销掉
按上面带参数的调用方法,应该如何取消,至少我写成
file.removeEventListener(Event.COMPLETE, completeHandler);
或者
file.removeEventListener(Event.COMPLETE, function(e:Event){
completeHandler(e,参数)
;});
都无法达到注销事件的目的
解决方案:
利用arguments的关键字callee
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。[function.]arguments.callee可选项 function参数是当前正在执行的 Function对象的名称。说明callee属性的初始值就是正被执行的 Function 对象。callee属性是 arguments 对象的一个成员,它表示对函数对象本身的引用。
添加监听:
file.addEventListener(Event.COMPLETE,
function(e:Event){
completeHandler(e,btnId,arguments.callee)
},false,0,true
);
public var completef:Function; //用于存放需要被remove的函数对象
private function completeHandler(event:Event,btnId:String="bzfw",callee:Function=null):void{
completef=callee;// 带清理函数
。。。。。。
}
注销事件:
var bool:Boolean = file.hasEventListener(Event.COMPLETE);
if (bool)
file.removeEventListener(Event.COMPLETE, completef);