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(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |