AS3 - 匿名功能'这个'

时间:2014-12-25 19:07:30

标签: actionscript-3 flash

我玩了一些匿名函数,我注意到这段代码没有跟踪同一件事两次:

public function Main() 
    {
        trace(this);

        stage.addEventListener(MouseEvent.CLICK, function(e:Event):void
        {
            trace(this);
        });
    }

第一个跟踪跟踪“[object Main]”,第二个跟踪跟踪“[object Global]”(点击后)。为什么会这样?什么是对象Global,它对某些东西有用吗?

2 个答案:

答案 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