Actionscript 3 动作脚本3';这';问题

Actionscript 3 动作脚本3';这';问题,actionscript-3,actionscript,this,anonymous-function,Actionscript 3,Actionscript,This,Anonymous Function,我知道在编写actionscript3code()时,尽可能多地使用this是很常见的 但是如果您编写的匿名函数没有适当的匹配,那么应该怎么做呢 x.addEventListener(Event.WHATEVER, function(event:*) { // When this callback fires, there is a fail: // because there is no 'this' at this point. // INVALID! th

我知道在编写
actionscript3
code()时,尽可能多地使用
this
是很常见的

但是如果您编写的匿名函数没有适当的
匹配,那么应该怎么做呢

x.addEventListener(Event.WHATEVER, function(event:*) {
    // When this callback fires, there is a fail:
    // because there is no 'this' at this point.

    // INVALID!
    this.someAction();
});
我看到一些关于写作的建议,比如:

var self = this;
然后在匿名函数的代码中使用
self
,但这似乎很奇怪


您对这个问题有什么看法(例如,您的编码标准中有关于它的内容吗)?

因为您使用的是匿名函数,所以不存在这个问题(本质上)


通过定义
self
您定义了一个局部范围变量,然后可以通过引用调用该变量。。。就个人而言,我不喜欢这种做法。

编辑:啊,我的错,我误解了。我通常不提及
,除非它是一个自包含的操作等。使用
self
或类似的方法可以为其他方法提供访问它的方法。我个人从这个标准着手开发,比如删除侦听器等等


希望这能有所帮助。

我们有一个类似的方法(因此这不是一个答案,而是对你方法的肯定):


当然,纯粹主义者可能会说,您不应该以阻止删除侦听器的方式添加侦听器!也就是说,我们在其他地方使用此约定,在侦听器上下文之外使用内部函数。

您可以使用方法将“this”固定到实例,或者停止使用“this”,以便Flash Player搜索范围链。我更喜欢让Flash Player搜索作用域链,因为我认为到处都是“this”的代码很难阅读。

你有没有具体的理由使用匿名函数而不是命名函数?引用格兰特·斯金纳的话:

在几乎所有情况下,使用 代码中的匿名函数 表示存在架构问题。 几乎没有什么真正的用途 匿名函数–它们的功能更少 高效,更难调试,并且 在阅读代码时,要摸索要困难得多

以下是Mike Chamber博客中关于功能和范围的有趣讨论:


如果你在评论底部附近向下滚动,你可以找到格兰特的回复。

谢谢,我显然理解
这个
语句是如何工作的,以及如果你使用匿名函数,范围为什么会改变。我基本上是在问你在你的编码标准/任何东西中是否有类似的建议。因为显然有两种方法可以解决这个问题——在匿名函数中忘记
这个
,或者使用我描述的
self
方法。我只是在收集意见。不管是否纯粹,不删除侦听器通常都是不好的做法,因为您不关心用户资源。此约定与Crockford的约定很好地一致,即使包含对象可由“私有”方法访问:我不会说在ActionScript中一直使用“This”是很常见的。就我个人而言,这是一种糟糕的做法。鉴于格兰特最近在JavaScript方面的工作,听说他不再有这种感觉,我并不感到惊讶。JS非常有效地使用匿名函数,其中许多函数概念在AS3中也能很好地工作。这可能不是讨论的地方,不过。。。
public class myClass extends EventDispatcher{

   public function foo() : void {
      var thisObject : myClass = this;
      this.addEventListener(EVENT, function(event : Event) : void {
         thisObject.foo_internal();
      }, false, 0, true);
   }

   protected function foo_interal() : void {

   }

}