我的类中有一个覆盖函数,它添加了一个事件处理程序,如下所示:
override public function hide():void {
...
tween.addEventListener(TweenEvent.MOTION_FINISH, function(evt:Event):void {
...
super.hide();
}, false, 0, true);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,Flash告诉我:"1006:超级表达式只能在类实例方法中使用." (如果移动到适当的实例方法,它可以工作).
所以我想理解为什么我不能使用super.hide();来自我的就地处理函数的调用?
我可以毫无问题地从那里引用任何实例变量和方法,所以我认为该处理程序可以访问适当的上下文.请帮我理解这个.
它是,因为this在一个匿名函数指向[object global]...有一个去,并追踪它...
现在一个AS3功能是,你可以从里面访问实例成员,但这是一个非常奇怪的功能... this.myProp将无法正常工作,而myProp将...这是一些黑魔法,它会自动创建一个闭包...它适用于实例成员,但不适用于super......
恕我直言,你不应该无论如何使用匿名函数,只有当它是为原型,或作为参数的Array方法为forEach,map,filter和...
格尔茨
back2dos