所以我在这里遇到了一些问题。我将在我将要展示的代码中使用伪变量名称以使其更简单。但是,我创建了一个函数,该函数被某些不重要的条件调用一次。此函数创建一个函数本身的变量。然后,我为这个函数变量调用一个timer eventListener来在一个循环中调用它。它适用于那部分。但是,我想删除这个事件监听器,但它不能识别该函数的变量(我作为参数发送)。它显示为null,这意味着我无法删除eventListener,并且该函数将永远被调用。有解决方案吗
P.S。 myTimer是一个随处可用的公共变量,我收到1010错误。
public function calledOnce(){
this.myFunction = loopFunction( x, y, "function" );
this.myTimer.addEventListener( TimerEvent.TIMER, this.myFunction );
}
public function loopFunction( refX, refY, refFunction ){
return function( e: Event ){
//Do something
switch( refFunction ){
case "function":
this.myTimer.removeEventListener( TimerEvent.TIMER, this.myFunction );
break;
}
};
}
答案 0 :(得分:2)
我认为它与this
有关。如果你trace (this);
,你会得到[object YourClass]
,但是当你在函数内部这样做时会这样:
public function loopFunction( refX, refY, refFunction ){
return function( e: Event ){
trace (this);
//Do something
switch( refFunction ){
case "function":
myTimer.removeEventListener( TimerEvent.TIMER, myFunction );
break;
}
};
}
您得到[global]
而我感觉您的类对象已不再存在于该范围内。我设法通过删除this
并明确声明变量来运行它:
private var myFunction:Function;
private var myTimer:Timer = new Timer (1000);
public function calledOnce(){
myFunction = loopFunction( x, y, "function" );
myTimer.addEventListener( TimerEvent.TIMER, this.myFunction );
}
public function loopFunction( refX, refY, refFunction ){
return function( e: Event ){
//Do something
switch( refFunction ){
case "function":
myTimer.removeEventListener( TimerEvent.TIMER, myFunction );
break;
}
};
}
答案 1 :(得分:0)
您需要返回现成的功能代码,而不引用那些refX, refY, refFunction
,因为它们在生成的函数中不可用。
public function loopFunction( refX, refY, refFunction ){
switch( refFunction ){
case "function":
return function( e: Event ){
//Do something
myTimer.removeEventListener( TimerEvent.TIMER, myFunction );
}
}
}
}
请注意,删除动态生成的侦听器并不容易,为此,首先必须将函数存储在某处(您已经有代码将其存储在变量myFunction
中)。