加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – 删除在Actionscript 3中具有匿名功能的侦听器

发布时间:2020-12-15 07:31:05 所属栏目:百科 来源:网络整理
导读:up.addEventListener(MouseEvent.CLICK,function clickFunc(event:MouseEvent):void { revealSpinner(event,51.42,1,spinner); event.currentTarget.removeEventListener(event.type,arguments.callee); autoTimer.stop(); },false,true);down.addEventListe
up.addEventListener(MouseEvent.CLICK,function clickFunc(event:MouseEvent):void
    { 
        revealSpinner(event,51.42,1,spinner);
        event.currentTarget.removeEventListener(event.type,arguments.callee);
        autoTimer.stop();
    },false,true);
down.addEventListener(MouseEvent.CLICK,-1,true);

上面的代码为一对MC添加了一个监听器.最初的方法是匿名的,但我已经命名他们的clickFunc(),以尝试在我的删除监听器中引用它们.

这是我的删除侦听器代码.这两个片段都是分开的功能.在remove方法之前调用add listener方法.

up.removeEventListener(MouseEvent.CLICK,clickFunc );
down.removeEventListener(MouseEvent.CLICK,clickFunc);

一旦我发布电影我得到这个错误:

1120: Access of undefined property clickFunc.

解决方法

首先,您使用两次相同的名称(clickFunc),不能推断您在调用removeEventListener时引用哪一个.其次,ClickFunc只能在声明的函数中访问:

function foo() {
    var clickFunc: Function;
    up.addEventListener(MouseEvent.CLICK,clickFunc = function (event:MouseEvent):void
        { 
            revealSpinner(event,spinner);
            event.currentTarget.removeEventListener(event.type,arguments.callee);
            autoTimer.stop();
        },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).他们需要不同的标识符(如果你愿意,请点击Func1并点击Func2).这是我建议的解决方案:

private function addHandlers(): void
{
    up.addEventListener(MouseEvent.CLICK,upClickHandler,true);
    down.addEventListener(MouseEvent.CLICK,downClickHandler,true);
}

private function removeHandlers(): void
{
    up.removeEventListener(MouseEvent.CLICK,upClickHandler);
    down.removeEventListener(MouseEvent.CLICK,downClickHandler);
}

private function upClickHandler(event:MouseEvent):void
{ 
    revealSpinner(event,spinner);
    event.currentTarget.removeEventListener(event.type,arguments.callee);
    autoTimer.stop();
}

private function downClickHandler(event:MouseEvent):void
{ 
    revealSpinner(event,arguments.callee);
    autoTimer.stop();
}

当然,如果像你的例子那样,方法是一样的,你只能使用一个:

private function addHandlers(): void
{
    up.addEventListener(MouseEvent.CLICK,clickHandler,clickHandler);
    down.removeEventListener(MouseEvent.CLICK,clickHandler);
}

private function clickHandler(event:MouseEvent):void
{ 
    revealSpinner(event,arguments.callee);
    autoTimer.stop();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读