यह प्रदर्शन के बारे में नहीं है यह एक वस्तु का एक विशिष्ट उदाहरण के एक संपत्ति पहुँचने के बारे में बताया गया है: -
x.init()
अगर आप समारोह में this
का उपयोग नहीं किया था 'परीक्षण' का प्रदर्शन नहीं करेगा।
प्रभावी ढंग से ऊपर पंक्ति के रूप में एक ही है: -
x.init.call(x);
call
का उपयोग, जब समारोह निष्पादित किया जाता है this
को सौंपा गया है में पहली परमाटर।
अब विचार करें: -
var fn = x.init; //Note no() so the function itself is assigned to the variable fn
fn();
अब आप चेतावनी में कुछ भी नहीं मिलता है। इसका कारण यह है ऊपर प्रभावी रूप से है: -
fn.call(window);
ब्राउज़र में जावास्क्रिप्ट का आयोजन किया window
वस्तु वैश्विक वस्तु का पर्याय है। जब किसी फ़ंक्शन को "कच्चे में" कहा जाता है तो this
वैश्विक ऑब्जेक्ट पर डिफ़ॉल्ट होता है।
क्लासिक त्रुटि कुछ इस तरह कर रही है: -:
onclick.call(theDOMElement)
-
var x = {
ele: 'test';
init: function(elem) {
elem.onclick = function() { alert(this.ele); }
}
}
x.init(document.getElementById('myButton'));
हालांकि इस वजह onclick घटना से जुड़ी समारोह की तरह कोड का उपयोग ब्राउज़र द्वारा कहा जाता है काम नहीं करता है
इसलिए जब फ़ंक्शन चल रहा है this
ऐसा नहीं है जो आपको लगता है।
मेरे इस स्थिति के लिए हमेशा की तरह समाधान है: -
var x = {
ele: 'test';
init: function(elem) {
var self = this;
elem.onclick = function() { alert(self.ele); }
elem = null;
}
}
x.init(document.getElementById('myButton'));
नोट elem = null
आईई स्मृति रिसाव है काम के आसपास।
यह सिर्फ आप नहीं है - यह भाषा के अधिक भ्रमित पहलुओं में से एक है। आपको कुछ अच्छे जवाब मिलना चाहिए; मैं उन्हें पढ़ने के लिए तत्पर हूं। –