我知道在编写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
,但这看起来很奇怪。
您对此问题的看法是什么(例如,您的编码标准中有什么内容)
答案 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”的代码很难阅读。