我发现addEventListener
方法有点受限。我想使用它的另一个版本,由我制作。我想插入一个参数来判断是否可以自动删除调度的事件,这样就可以避免我在任何地方写这个:
obj.addEventListener(Click, function onClick(e:Event):void {
obj.removeEventListener(Click, onClick); // <--- I want to avoid this
});
然后:
obj.addEventListener(Click, function onClick(e:Event):void {
// no need anymore.
}, true); // <--- see
我可以采取什么方法来实现这一目标?
答案 0 :(得分:1)
使用覆盖 关闭,您始终可以拦截 addEventListener
方法调用:
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
{
var self = this;
var weakListener:Function = function(e) {
self.removeEventListener(type, weakListener);
listener(e);
}
super.addEventListener(type, weakListener, useCapture, priority, useWeakReference);
}
答案 1 :(得分:0)
允许匿名函数的快速且相当简单的解决方案是arguments.callee属性
obj.addEventListener(Event.WHATEVER, function(e:Event)
{
e.currentTarget.removeEventListener(Event.WHATEVER, arguments.callee);
//Do your stuff
}
这会同时创建事件监听器和监听功能,在remove监听器中,它使用arguments.callee引用被调用的函数,允许它自行删除。