2011/02/09

移除匿名函數偵聽

有時候為了圖方便,
在製作偵聽時會使用匿名函數,
不過這樣一來,
要移除這個偵聽可不是將addEventListener改成removeEventListener就能解決,
必須透過arguments類別的callee屬性來達到目的,
callee是目前正在執行中的函數的參照。

 具體作法如下面範例:
stage.addEventListener(MouseEvent.CLICK,
 function(e:MouseEvent){
  trace("test");
  stage.removeEventListener(MouseEvent.CLICK,arguments.callee);
 }
);

另外,還有一個方便的作法
(出處:http://blog.yoz.sk/2010/06/quick-tip-timer-listeners-doesnt-require-remove/)
EventDispatcher(event.currentTarget).removeEventListener(event.type, arguments.callee);

範例:
stage.addEventListener(MouseEvent.CLICK,
 function(e:MouseEvent){
  trace("test");
  EventDispatcher(e.currentTarget).removeEventListener(e.type, arguments.callee);
 }
);

沒有留言:

張貼留言