2012-10-04 13 views
6
function Foo(elementId, buttonId) { 
this.element = document.getElementById(elementId); 
this.button = document.getElementById(buttonId); 
this.bar = function() {dosomething}; 
this.button.addEventListener('click', function(e) {this.bar();}, false); 
} 

var myFoo = new Foo('someElement', 'someButton'); 

मैं अपने कन्स्ट्रक्टर के अंदर ईवेंट श्रोताओं को जोड़ना चाहता हूं, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। क्या यह कुछ सही वाक्यविन्यास के साथ संभव है? मैं हमेशा लाइन पर लटका दिया हो:कन्स्ट्रक्टर में ईवेंट श्रोताओं को जोड़ना

this.button.addEventListener('click', function(e) {this.bar();}, false); 

उत्तर

5

आपका this मूल्य परिवर्तन की तरह एक चर का उपयोग करें। आप चयनकर्ता में एक संदर्भ रख सकते हैं, और संदर्भ का उपयोग कर सकते हैं।

function Foo(elementId, buttonId) { 

    /*...*/ 

    var self = this; 
    this.button.addEventListener('click', function(e) {self.bar();}, false); 
} 

या एक और अधिक आधुनिक समाधान की आवश्यकता नहीं है कि एक चर Function.prototype.bind उपयोग करने के लिए किया जाएगा।

function Foo(elementId, buttonId) { 

    /*...*/ 

    this.button.addEventListener('click', this.bar.bind(this), false); 
} 

.bind विधि जो भी आप इसे पारित करने के लिए बाध्य this मूल्य के साथ एक नया bar फ़ंक्शन। इस मामले में, यह कन्स्ट्रक्टर से मूल this तक बाध्य है।

+1

यह ध्यान रखना महत्वपूर्ण है कि अभी भी आमतौर पर उपयोग किए जाने वाले कई ब्राउज़रों (जैसे आईई 8, सफारी <= 5.1, अन्य) Function.prototype.bind का समर्थन नहीं करते हैं: http://kangax.github.com/es5-compat-table/ – zachelrath

+0

var self = this; उसने ऐसा किया; मैंने यह भी नहीं सोचा था कि 'यह' बटन तत्व का संदर्भ दे सकता है। आपकी मदद और त्वरित प्रतिक्रिया के लिए धन्यवाद। अगर मैं कर सकता तो मैं ऊपर हट जाऊंगा, लेकिन मेरे पास अभी तक प्रतिनिधि नहीं है :) –

+1

@Llepwryd: खुशी है कि मैं मदद कर सकता हूं। –

1

ईवेंट हैंडलर में this तत्व है कि इस घटना के लिए जोड़ा गया है।

बाहरी this तक पहुंचने के लिए, आपको इसे एक अलग चर में स्टोर करने की आवश्यकता है।

0

क्लिक हैंडलर में this बटन तत्व नहीं वस्तु है, वस्तु के संदर्भ के लिए, निर्माता में var self = this;

function Foo(elementId, buttonId) { 
    var self = this; 
    this.element = document.getElementById(elementId); 
    this.button = document.getElementById(buttonId); 
    this.bar = function() {dosomething}; 
    this.button.addEventListener('click', function(e) {self.bar();}, false); 
} 
संबंधित मुद्दे