快速提问...是否可以将EventListener附加到函数中?这样,如果在函数执行过程中的任何一点调度Event,那么EventHandler会被触发吗?
干杯。
答案 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.
因此,简短的回答是:您无法将事件监听器附加到函数。
但正如已经提到的,你可以:
function bla(callback1:Function, callback2:Function):void
。Functor
类,其中包含方法execute()
并实现IEventDispatcher
。通过这种方式,您可以调用函数myFunctor.execute()
并可以调度事件。