मैं इस कोड (JSFiddle)मैं इस "सार्वजनिक" विधि को सही ढंग से कैसे बढ़ा सकता हूं?
var OBJ = function(){
var privateVar = 23;
var self = this;
return {
thePrivateVar : function() {
return privateVar;
},
thePrivateVarTimeout : function() {
setTimeout(function() { alert(self.thePrivateVar()); } , 10);
}
}
}();
alert(OBJ.thePrivateVar());
OBJ.thePrivateVarTimeout();
यह एक वास्तविक समस्या मैं आ रही है की एक अमूर्त है।
तो - मैं OBJ.thePrivateVarTimeout()
पर 10
और फिर alert
को 23 के साथ प्रतीक्षा करने की उम्मीद करता हूं (जिसे मैं इसे अन्य खुली विधि के माध्यम से एक्सेस करना चाहता हूं)।
हालांकि self
सही ढंग से सेट नहीं लग रहा है। जब मैं self = this
सेटिंग कर रहा हूं तो ऐसा लगता है कि this
फ़ंक्शन का संदर्भ नहीं है बल्कि वैश्विक वस्तु का संदर्भ है। ऐसा क्यों है?
मैं सार्वजनिक विधि कैसे बना सकता हूं thePrivateVarTimeout
अन्य सार्वजनिक विधि thePrivateVar
पर कॉल करें?
* ऐसा क्यों? * क्योंकि आप सामान्य रूप से कार्य बुला रहे हैं है ('समारोह()')। इस मामले में, यह 'हमेशा' वैश्विक वस्तु को संदर्भित करता है। यदि आप इसे किसी खाली ऑब्जेक्ट को संदर्भित करना चाहते हैं, तो इसे 'नया' के साथ कॉल करें या एक असाइन करें: 'var self = {}; '। –
@ फ़ेलिक्सक्लिंग धन्यवाद यह 'स्वयं' सही ढंग से सेट करता है। हालांकि मैं अभी भी 'ThePrivateVar' को आमंत्रित करने के लिए इसका उपयोग नहीं कर सकता। मुझे लगता है कि रेनोस का जवाब यह है कि मुझे यह करना चाहिए। –