AS3引用当前功能

Mar*_*rty 2 methods actionscript scope actionscript-3

我刚刚遇到一个奇怪的场景,我想removeEventListener()在一个没有名字的函数中使用.我的意思是,我已经在其中创建了函数addEventListener(),而不是引用一个:

addEventListener(
    Event.ENTER_FRAME, 
    function(e:Event):void
    {
        if(getTimer() > 8000)
        {
            // removeEventListener(Event.ENTER_FRAME, <<this function>>);
            // Other stuff
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

是否可以引用当前函数(即我正在使用的函数)?或者我只需要构建上面的标准方式?

请注意,我完全清楚您可以使用许多可用的标准化方法来实现上述目标,它纯粹是一个示例代码段.

cwa*_*ole 15

有两个选项,您可以为其命名(有三种方法)或者您可以使用arguments.callee.

在前者的情况下,在AS3中命名函数的三种方法:

class Foo
{
    // class (static or member) level
    public function bar():void
    {
       // use a variable (technically, this function is anonymous, but we can
       // still use the variable to reference the function itself.
       var inVariable:Function = function():void
       {
          // declare it in a local scope
          function local():void
          {

          }
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用命名函数:

function callback(e:Event):void {
    trace("tick");
    removeEventListener(Event.ENTER_FRAME, callback);
}
addEventListener(Event.ENTER_FRAME, callback);
Run Code Online (Sandbox Code Playgroud)

要使用arguments.callee:

addEventListener(
    Event.ENTER_FRAME, 
    function(e:Event):void
    {
        if(getTimer() > 8000)
        {
            // I get superstitious and I use a local variable.
            var callee:Function = arguments.callee
            removeEventListener(event.type, callee);
            // Other stuff
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

  • **arguments.callee**是我要找的,谢谢. (3认同)