0

我发现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

我可以采取什么方法来实现这一目标?

4

2 回答 2

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);
    }
于 2013-07-15T12:57:11.367 回答
0

允许匿名函数的一个快速且相当简单的解决方案是 arguments.callee 属性

obj.addEventListener(Event.WHATEVER, function(e:Event)
{
    e.currentTarget.removeEventListener(Event.WHATEVER, arguments.callee);
    //Do your stuff
}

这将同时创建事件监听器和监听函数,在删除监听器中,它使用 arguments.callee 引用被调用的函数,允许它自行删除。

于 2013-07-16T08:03:59.070 回答