Прежде всего, у вас есть одно и то же имя, используемое дважды (clickFunc
), невозможно определить, какое имя вы указали в своих вызовах для удаленияEventListener. Во-вторых, clickFunc
будет доступен только в той функции, в которой он объявлен:
function foo() {
var clickFunc: Function;
up.addEventListener(MouseEvent.CLICK,
clickFunc = function (event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
},
false, 0, true);
// 'clickFunc' available here, so this is possible:
up.removeEventListener(MouseEvent.CLICK, clickFunc);
}
function bar() {
// 'clickFunc' is not available here, so this is not possible:
up.removeEventListener(MouseEvent.CLICK, clickFunc);
// 1120: Access of undefined property clickFunc
}
Если вам нужно сослаться на методы (например, удалить их из события), они не могут быть анонимными. Если вам нужно ссылаться на них из нескольких методов, то они не должны быть локальными для одного метода (foo в приведенном выше примере). И им нужны разные идентификаторы (clickFunc1
и clickFunc2
, если хотите). Это мое предлагаемое решение:
private function addHandlers(): void
{
up.addEventListener(MouseEvent.CLICK, upClickHandler, false, 0, true);
down.addEventListener(MouseEvent.CLICK, downClickHandler, false, 0, true);
}
private function removeHandlers(): void
{
up.removeEventListener(MouseEvent.CLICK, upClickHandler);
down.removeEventListener(MouseEvent.CLICK, downClickHandler);
}
private function upClickHandler(event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
}
private function downClickHandler(event:MouseEvent):void
{
revealSpinner(event,51.42,-1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
}
Конечно, если, как в вашем примере, методы идентичны, вы можете использовать только один:
private function addHandlers(): void
{
up.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
down.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
}
private function removeHandlers(): void
{
up.removeEventListener(MouseEvent.CLICK, clickHandler);
down.removeEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(event:MouseEvent):void
{
revealSpinner(event,51.42,-1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
}