अब , यदि आप getWindow
फिर से फोन:
a.getWindow();
A.prototype.getWindow
नहीं रह गया है कहा जाता है क्योंकि उदाहरण वस्तु अपने आप में एक getWindow
विधि है। यह विधि उसी "जीत" ऑब्जेक्ट को लौटाती है जो पहली बार getWindow
विधि को कॉल करने पर वापस लौटा दी गई थी।
आपका पैटर्न कई के लिए A
उदाहरणों में एक ही A.prototype.getWindow
विधि का उपयोग करने के लिए अपने स्वयं वस्तुओं "जीत" का दृष्टांत देता है। इस पर विचार करें:
var a1 = new A,
a2 = new A,
a3 = new A;
a1.getWindow(); // creates window W1 and returns it
a2.getWindow(); // creates window W2 and returns it
a1.getWindow(); // returns window W1
a2.getWindow(); // returns window W2
a3.getWindow(); // creates window W3 and returns it
a1.getWindow(); // returns window W1
a2.getWindow(); // returns window W2
a3.getWindow(); // returns window W3
यह काफी उपयोगी पैटर्न है :)
अद्यतन:
यह आपके कोड है:
return (this.getWindow = function() {
return win;
})();
पहले, आइए एक नजर डालें माता-पिता के अंदर अभिव्यक्ति पर:
this.getWindow = function() { return win; }
जैसा कि आप देख सकते हैं, यह एक असाइनमेंट अभिव्यक्ति है। this
(इंस्टेंस ऑब्जेक्ट) द्वारा संदर्भित ऑब्जेक्ट की getWindow
संपत्ति को एक अज्ञात फ़ंक्शन ऑब्जेक्ट असाइन किया गया है।
ध्यान दें कि यह फ़ंक्शन win
ऑब्जेक्ट देता है।
इस असाइनमेंट अभिव्यक्ति का परिणाम फ़ंक्शन ऑब्जेक्ट ही है! इसका मतलब है कि माता-पिता के अंदर मान फ़ंक्शन ऑब्जेक्ट है। , आप देख सकते हैं
return the_function_object();
समारोह:
return (the_function_object)();
हम कोष्ठक हटा सकते हैं के बाद से हम उन्हें और आवश्यकता नहीं है:
अब, चलो पूरी तस्वीर पर एक नज़र डालें ऑब्जेक्ट कहा जाता है, और तब उस फ़ंक्शन का रिटर्न वैल्यू वापस कर दिया जाता है।
जैसा ऊपर बताया गया है, फ़ंक्शन win
देता है। इसलिए, कोड इस पर ले कर जाता:
return win;
तो क्या अपने कोड करता है: सबसे पहले
, यह this.getWindow
को function() { return win; }
प्रदान करती है।
SECOND, यह उस कार्य को कॉल करने का परिणाम देता है जो win
है।
मेरे कोड एक ही परिणाम पैदा करता है लेकिन समझना आसान है:
this.getWindow = function() {
return win;
};
return win;
तो अगर मैं तुम्हें सही ढंग से समझ, एक 'प्रत्यक्ष' ग्रुप ए पर समारोह में एक ही नाम के साथ पिछले प्रोटोटाइप समारोह अधिलेखित कर देता है? – pimvdb
@pimvdb नहीं - उदाहरण प्राप्त ऑब्जेक्ट में एक 'getWindow' विधि जोड़ दी गई है (जो ऊपर दिए गए कोड में 'a' है)। 'A.prototype.getWindow' विधि संशोधित नहीं है। हालांकि, 'a.getWindow' अब ** छाया ** ** एप्रोटोटाइप.जेटविंडो 'विधि है, ताकि यह प्रोटोटाइप विधि इंस्टेंस ऑब्जेक्ट' ए' के लिए पहुंच योग्य हो जाए। –
मुझे 'वापसी' के अंत में '()' क्यों चाहिए? – theateist