2010-11-01 10 views
8

मैं इस वर्ग/समारोहएक विधि के समारोह के भीतर से एक प्रोटोटाइप के माता-पिता इस का उपयोग कैसे

function Menu() 
{ 
    this.closetimer = 0; 
    this.dropdown = 0; 
} 

Menu.prototype.menuTimer = function() 
{ 
    this.closetimer = setTimeout(function() 
    { 
    this.menuClose(); 
    }, this.timeout); 
} 

Menu.prototype.menuClose = function() 
{ 
    if(this.dropdown) this.dropdown.css('visibility','hidden'); 
} 

मैं समारोह menuClose() जो मेनू वर्ग का हिस्सा है कॉल करना चाहते हैं, लेकिन मैं इस कोड को वास्तव में कोशिश करता है लगता है closetimer ऑब्जेक्ट से menuClose() पर कॉल करने के लिए।

मैं मेनू ऑब्जेक्ट से के भीतर menuClose() का संदर्भ कैसे दूं?

उत्तर

15

अपने setTimeout() कॉलबैक में, thiswindow को संदर्भित करता है, सिर्फ इस तरह एक संदर्भ रखें:

Menu.prototype.menuTimer = function(){ 
    var self = this; 
    this.closetimer = setTimeout(function(){ 
     self.menuClose(); 
    }, this.timeout); 
} 
+0

DOH! धन्यवाद! दिमाग़ का दही। – polyhedron

+0

@ पोलीहेड्रॉन - स्वागत है :) –

4

आप मेनू (यह) जब आप इसे करने के लिए उपयोग किया है के लिए एक संदर्भ को परिभाषित ..

Menu.prototype.menuTimer = function(){ 
    var _self = this; 
    this.closetimer = setTimeout(function(){ 
     _self.menuClose(); 
    }, this.timeout); 
} 
+0

वैश्विक नामस्थान के साथ टक्कर के खिलाफ सुरक्षा के लिए आपको 'var _self' का उपयोग करना चाहिए। – MForster

+0

@MFoster, पहले से ही सही किया गया है, धन्यवाद :) ट्रिगर खुश .. –

6

एक और तरीका आंतरिक कार्य को बांधना है।

Menu.prototype.menuTimer = function(){ 
this.closetimer = setTimeout(function(){ 
    this.menuClose(); 
}.bind(this), this.timeout); 
} 

Menu.prototype.menuTimer = function(){ 
this.closetimer = setTimeout(this.menuClose.bind(this), this.timeout); 
} 
+1

इसे 'setTimeout (this.menuClose.bind (this), this.timeout) के रूप में लिखा जा सकता है? – MForster

+0

आप बिल्कुल सही हैं और मैंने इसे दिखाने के लिए अपडेट किया है। यह अब तक का सबसे अच्छा समाधान है। मुझे सभी वोट दो! – clockworkgeek

+0

इससे आपको थोड़ी लालची मिलती है :-) – MForster

संबंधित मुद्दे