Actionscript 3'这个'问题

时间:2011-02-25 21:20:44

标签: actionscript-3 actionscript this anonymous-function

我知道在编写this代码http://www.daveoncode.com/2009/01/07/we-should-always-use-actionscripts-this-keyword/)时,尽可能多地使用ActionScript 3

但是,如果您编写的匿名函数没有适当的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,但这看起来很奇怪。

您对此问题的看法是什么(例如,您的编码标准中有什么内容)

5 个答案:

答案 0 :(得分:1)

由于您使用的是匿名函数,因此没有(本身)。

通过定义self,您正在定义一个本地范围变量,然后可以通过引用调用...个人,我不喜欢这种做法。

答案 1 :(得分:1)

您是否有使用匿名函数而非命名函数的特定原因?引用格兰特斯金纳:

  几乎在每种情况下,使用一个   代码中的匿名函数   表示架构问题。   几乎没有真正的用途   匿名函数 - 它们更少   高效,更难调试,以及   阅读代码时更难以理解。

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

http://www.mikechambers.com/blog/2008/10/08/function-closures-and-this-in-actionscript-3/

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

答案 2 :(得分:0)

编辑:啊 - 我的坏,我误解了。我通常不会引用this,除非它是一个自包含的动作,等等。使用self或类似的东西为其他方法提供了访问它的方法。我个人接受了这个标准的开发,删除了听众等。

希望有所帮助。

答案 3 :(得分:0)

我们有类似的方法(所以这不是答案,因为它肯定了你的方法):

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 {

   }

}

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

答案 4 :(得分:0)

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