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 {
}
}