为什么我不能从就地事件处理函数调用super方法?

kre*_*ret 1 actionscript-3

我的类中有一个覆盖函数,它添加了一个事件处理程序,如下所示:

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();来自我的就地处理函数的调用?

我可以毫无问题地从那里引用任何实例变量和方法,所以我认为该处理程序可以访问适当的上下文.请帮我理解这个.

bac*_*dos 6

它是,因为this在一个匿名函数指向[object global]...有一个去,并追踪它...

现在一个AS3功能是,你可以从里面访问实例成员,但这是一个非常奇怪的功能... this.myProp将无法正常工作,而myProp将...这是一些黑魔法,它会自动创建一个闭包...它适用于实例成员,但不适用于super......

恕我直言,你不应该无论如何使用匿名函数,只有当它是为原型,或作为参数的Array方法为forEach,map,filter和...

格尔茨

back2dos