हैंडल विधि पर एक नजर डालें
https://developer.mozilla.org/en-US/docs/Web/API/EventListener
"रॉ" जावास्क्रिप्ट:
function MyObj() {
this.abc = "ABC";
}
MyObj.prototype.handleEvent = function(e) {
console.log("caught event: "+e.type);
console.log(this.abc);
}
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj);
अब अपने तत्व पर क्लिक करें (आईडी "myElement" के साथ) और इसे कंसोल में निम्नलिखित प्रिंट करना चाहिए:
पकड़ा घटना:
एबीसी पर क्लिक करें
यह आपको इवेंट हैंडलर के रूप में एक ऑब्जेक्ट विधि की अनुमति देता है, और उस पद्धति में सभी ऑब्जेक्ट गुणों तक पहुंच है।
आप सीधे AddEventListener (जैसे:) को जोड़ने के लिए किसी ऑब्जेक्ट की एक विधि पारित नहीं कर सकते हैंelement.addEventListener('click',myObj.myMethod);
और इस तरह myMethod
से कार्य करने की अपेक्षा करेंगे जैसे कि मुझे सामान्य रूप से ऑब्जेक्ट पर बुलाया गया था। मैं अनुमान लगा रहा हूं कि addEventListener को दिए गए किसी भी फ़ंक्शन को संदर्भित किए जाने के बजाय किसी तरह कॉपी किया गया है। उदाहरण के लिए, यदि आप addEventListener (एक चर के रूप में) में एक ईवेंट श्रोता फ़ंक्शन संदर्भ पास करते हैं, तो इस संदर्भ को अनसेट करें, ईवेंट श्रोता अभी भी निष्पादित किया जाता है जब ईवेंट पकड़े जाते हैं।
ईवेंट श्रोता और स्टिल के रूप में एक विधि को पारित करने के लिए एक और (कम सुरुचिपूर्ण) वर्कअराउंड this
और अभी भी इवेंट श्रोता के भीतर ऑब्जेक्ट प्रॉपर्टी की पहुंच कुछ इस तरह होगी:
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));