添加EventListener来运行?

时间:2012-03-08 21:34:56

标签: actionscript-3

快速提问...是否可以将EventListener附加到函数中?这样,如果在函数执行过程中的任何一点调度Event,那么EventHandler会被触发吗?

干杯。

5 个答案:

答案 0 :(得分:3)

您可以使用舞台发送此类事件并收听它:

stage.addEventListener("myFunctionWasCalled", callback);
myFunction();

public function callback(event:Event):void {
    trace("callback executed");
}

public function myFunction():void {
    stage.dispatchEvent(new Event("myFunctionWasCalled"));
}

答案 1 :(得分:2)

事件侦听器附加到属于从EventDispatcher下降的类的对象。您无法将它们附加到函数中。

答案 2 :(得分:0)

您可以通过简单地将函数引用(回调)作为参数传递来实现此目的

function cb(s:String):void {
   trace(s);
}

function doit(f:Function):void {
   // do something
   f("Hi");
   // do some more stuff
}

doit(cb);

答案 3 :(得分:0)

如果您只想在函数调用的生命周期中侦听事件,只需根据需要添加/删除。 例如:

function somefunction():void{
    someobject.addEventListener(Event, eventhandler);
    ... doing stuff
    someobject.removeEventListener(Event, eventhandler);
}

现在请记住,如果您这样做,那么您在均匀流量中的选择可能会变得非常难以追踪。

典型性你只需要在对象的生死中担心这一点与函数调用的生死相关。

答案 4 :(得分:0)

要将事件侦听器附加到对象,此对象必须实现IEventDispatcher接口。所以你可以扩展Function类并添加你的方法。 AS3文档说Function不是最终的,但AS3编译不同意它:VerifyError: Error #1103: Class Bla cannot extend final base class.

因此,简短的回答是:您无法将事件监听器附加到函数

但正如已经提到的,你可以:

  1. 将回调/回调传递给将在某个时刻调用的函数:function bla(callback1:Function, callback2:Function):void
  2. 在函数执行期间从其他对象调度事件,例如,您可以创建一个Functor类,其中包含方法execute()并实现IEventDispatcher。通过这种方式,您可以调用函数myFunctor.execute()并可以调度事件。