सबसे पहले, आपके पास एक ही नाम दो बार उपयोग किया जाता है (clickFunc
), इसका अनुमान नहीं लगाया जा सकता है जिसे आप निकालने के लिए अपनी कॉल में संदर्भित करते हैं। सभी का दूसरा, 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();
}
मैंने पहले से ही कोशिश की है और यह उत्पादन करता है और अतिरिक्त "1120: अपरिभाषित संपत्ति क्लिकफनक" की पहुंच स्वयं पर त्रुटि – ed209