यह पूरी तरह से समकक्ष नहीं है।
दोनों मामलों में, आप वैश्विक नामस्थान में एक फ़ंक्शन (कन्स्ट्रक्टर) Person()
परिभाषित करते हैं।
पहले मामले में, आप Person()
फ़ंक्शन के अंदर बंद होने पर एक नया फ़ंक्शन myMethod()
परिभाषित करते हैं। आम तौर पर, myMethod()
फ़ंक्शन फ़ंक्शन/कन्स्ट्रक्टर Person()
समाप्त होने के बाद उपलब्ध नहीं होगा। हालांकि, इस मामले में आप इसे this.method
पर असाइन करें। इस प्रकार, जब आप निर्माता
var myPerson = new Person();
एक नई वस्तु बनाई गई है चलाने के लिए, तो Person()
समारोह नई वस्तु को this
सेट के साथ कहा जाता है। इसलिए, आपकी नई ऑब्जेक्ट method
फ़ील्ड myMethod
फ़ंक्शन से जुड़ी है।
दूसरे मामले में, method2
Person.prototype
के अंदर परिभाषित किया गया है। इस मामले में, आप जब फोन
var myPerson = new Person();
कोई क्षेत्र अपने नए ऑब्जेक्ट के अंदर सीधे परिभाषित किया जाएगा (जैसा कि आप समारोह Person
में this
साथ कुछ भी नहीं)। हालांकि, प्रत्येक वस्तु में इसके प्रोटोटाइप का संदर्भ होता है। यदि ऑब्जेक्ट Person()
पर कॉल करके बनाया गया है, तो यह संदर्भ Person.prototype
पर सेट है। इस प्रकार, आपकी ऑब्जेक्ट में अंततः method2
होगा, हालांकि सीधे स्वयं में नहीं, बल्कि प्रोटोटाइप में। तो जब आप
myPerson.method2();
फोन दुभाषिया myPerson
ऑब्जेक्ट के अंदर method2
के लिए लग रहा है और कुछ भी नहीं पाता है, तो यह, myPerson
के प्रोटोटाइप है, जो Person.prototype
है और method2
पाता में लग रहा है, तो यह यह कहता है।
लंबी कहानी छोटी: पहले आपके कन्स्ट्रक्टर विधि बनाता है, इसलिए हर बार जब आप कन्स्ट्रक्टर को कॉल करते हैं, तो नई ऑब्जेक्ट में एक नई विधि बनाई जाती है और डाली जाती है। दूसरे मामले में, विधि प्रोटोटाइप में संग्रहीत होती है, इसलिए आपके द्वारा बनाए गए प्रत्येक ऑब्जेक्ट में आपकी विधि के उसी उदाहरण का संदर्भ होगा।
जावास्क्रिप्ट में 'प्रोटोटाइप' बनाम 'यह' का संभावित डुप्लिकेट?] (Http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript) –
[ प्रोटोटाइप में कन्स्ट्रक्टर फ़ंक्शन बनाम में जावास्क्रिप्ट ऑब्जेक्ट विधि घोषित करना] (http://stackoverflow.com/questions/9772307/declaring-javascript-object-method-in-constructor-function-vs-in-prototype) –