Actionscript 3 为什么可以';我不能从一个就地事件处理函数调用super方法吗?

Actionscript 3 为什么可以';我不能从一个就地事件处理函数调用super方法吗?,actionscript-3,Actionscript 3,我的类中有一个重写函数,它添加了一个事件处理程序,如下所示: override public function hide():void { ... tween.addEventListener(TweenEvent.MOTION_FINISH, function(evt:Event):void { ... super.hide(); }, false, 0, true); } “这不起作用,”Flash告诉我:“1006:超级表达式只能在类实例方法内部使用。”(如果

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

override public function hide():void {
  ...
  tween.addEventListener(TweenEvent.MOTION_FINISH, function(evt:Event):void {
    ...
    super.hide();
  }, false, 0, true);
}
“这不起作用,”Flash告诉我:“1006:超级表达式只能在类实例方法内部使用。”(如果移动到适当的实例方法,它会起作用)

所以我想理解为什么我不能调用
super.hide()从我的就地处理程序函数

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

是的,因为在匿名函数中,
这个
指向
[object global]
。。。试一试,追踪它

现在AS3的一个特性是,您可以从内部访问实例成员,但这是一个非常奇怪的特性
this.myProp
将不起作用,而
myProp
将。。。这是一种黑暗魔法,它会自动创建一个闭包。。。出于某种原因,它与实例成员一起工作,但与
super

总之,您不应该使用匿名函数,除非它是用于原型设计,或者作为
数组
方法的参数,如
forEach
映射
过滤器

格里茨


back2dos是的,因为在匿名函数中,
这个
指向
[object global]
。。。试一试,追踪它

现在AS3的一个特性是,您可以从内部访问实例成员,但这是一个非常奇怪的特性
this.myProp
将不起作用,而
myProp
将。。。这是一种黑暗魔法,它会自动创建一个闭包。。。出于某种原因,它与实例成员一起工作,但与
super

总之,您不应该使用匿名函数,除非它是用于原型设计,或者作为
数组
方法的参数,如
forEach
映射
过滤器

格里茨


back2dos

我相信您可以将该方法捕获到一个变量中,该变量存储在匿名方法的闭包中。例如:

override public function hide():void {
    ...
    var f:Function=super.hide;
    tween.addEventListener(TweenEvent.MOTION_FINISH, function(evt:Event):void {
        ...
        f();
    }, false, 0, true);
}

如果您正在努力解决闭包的概念,我可以进一步解释。

我相信您可以在存储在匿名方法闭包中的变量中捕获该方法。例如:

override public function hide():void {
    ...
    var f:Function=super.hide;
    tween.addEventListener(TweenEvent.MOTION_FINISH, function(evt:Event):void {
        ...
        f();
    }, false, 0, true);
}

如果您正在为关闭的概念而挣扎,我可以进一步解释。

很抱歉这么长时间的休息。我追踪了一些你说的东西,谷歌搜索了更多,阅读了更多的文档,但没有找到直接的答案。。。你的黑魔法理论似乎是最好的;)在ASDoc中,它在“super”关键字定义中表示,它可能不会在静态上下文中使用,很明显,可能会将全局视为静态。我不知道。抱歉这么长时间的休息。我追踪了一些你说的东西,谷歌搜索了更多,阅读了更多的文档,但没有找到直接的答案。。。你的黑魔法理论似乎是最好的;)在ASDoc中,它在“super”关键字定义中表示,它可能不会在静态上下文中使用,很明显,可能会将全局视为静态。不知道。我想我应该仔细阅读闭包的内容,以了解更多的一般概念。谢谢:)我想我应该仔细阅读闭包的内容,以了解更多的一般概念。谢谢:)