我玩了一些匿名函数,我注意到这段代码没有跟踪同一件事两次:
public function Main()
{
trace(this);
stage.addEventListener(MouseEvent.CLICK, function(e:Event):void
{
trace(this);
});
}
第一个跟踪跟踪“[object Main]”,第二个跟踪跟踪“[object Global]”(点击后)。为什么会这样?什么是对象Global,它对某些东西有用吗?
答案 0 :(得分:2)
在这种情况下,关键字this
代表global object
,这是创建函数的某个备用Universe,因为它是在任何自定义类或对象之外定义的。
主要课程
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
public function Main()
{
// trace(this);
stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void
{
trace(this);
});
}
}
}
<强>输出强>
[object global]
在以下示例中,函数侦听器toClick
定义为method of the Main class
,因此this
引用object Main
。
更正代码
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
public function Main()
{
// trace(this);
stage.addEventListener(MouseEvent.CLICK, toClick);
}
private function toClick(e:MouseEvent):void
{
trace(this);
}
}
}
<强>输出强>
[object Main]
答案 1 :(得分:1)
匿名函数允许您创建行为的变体,而无需创建子类或某些复杂的switch语句,因此您现在可以简单地分配一个函数来执行运行时中的某个任务。就像任何变量一样 - 只有这种特殊的变量没有值,而是行为。
//clasic
bar = function(arg1, arg2, etc) {
// do something here
}
当你trace(this)
参考哪个函数返回时,这是一个特殊的全局'bar'变量。
标准示例是事件侦听器,但您也可以将其应用于您想要的任何其他功能。
您可以在此处找到匿名函数:http://blogs.adobe.com/simplicity/2007/10/post.html。