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)