Confused about JavaScript prototypal inheritance -


पुस्तक में " जावास्क्रिप्ट निश्चित गाइड 5 संस्करण ", खंड 9.2 प्रोटोटाइप और विरासत, I निम्नलिखित शब्दों को ढूंढें:

पिछले अनुभाग में, मैंने दिखाया कि नया ऑपरेटर एक नया, खाली ऑब्जेक्ट बनाता है और फिर उस ऑब्जेक्ट की एक विधि के रूप में एक कन्स्ट्रक्टर फ़ंक्शन को आमंत्रित करता है। यह पूरी कहानी नहीं है, हालांकि। खाली वस्तु बनाने के बाद, उस वस्तु के प्रोटोटाइप नए सेट करता है। किसी वस्तु का प्रोटोटाइप उसके कन्स्ट्रक्टर फ़ंक्शन के प्रोटोटाइप प्रॉपर्टी का मूल्य है। सभी फ़ंक्शंस में एक प्रोटोटाइप संपत्ति होती है जो स्वचालित रूप से बनाई जाती है और फ़ंक्शन परिभाषित होने पर आरंभ होती है। प्रोटोटाइप संपत्ति का प्रारंभिक मान एक संपत्ति के साथ एक वस्तु है यह प्रॉपर्टी कंस्ट्रक्टर नामित है और कन्स्ट्रक्टर फ़ंक्शन को वापस संदर्भित करती है, जिसके साथ प्रोटोटाइप जुड़ा हुआ है। (आप अध्याय 7 से निर्माता संपत्ति को याद कर सकते हैं; यही कारण है कि प्रत्येक ऑब्जेक्ट के पास कन्स्ट्रक्टर संपत्ति है।) कोई भी आपके द्वारा इस प्रोटोटाइप ऑब्जेक्ट में जोड़े जाने वाले गुणक कन्स्ट्रक्टर द्वारा प्रारंभ किए गए ऑब्जेक्ट्स के गुण होने के लिए प्रतीत होंगे।

अब, अगर यह सत्य है, तो प्रोटोटाइप विरासत कैसे हो सकती है? मेरा मतलब है, मान लीजिए कि कन्स्ट्रक्टर फ़ंक्शन के प्रोटोटाइप ऑब्जेक्ट के पास कंस्ट्रक्टर प्रोसेस शुरू में है। क्योंकि प्रोटोटाइप ऑब्जेक्ट ही एक ऑब्जेक्ट है, क्योंकि इसके कन्स्ट्रक्टर का निर्धारण करने के लिए हम अक्सर prototype_object.constructor का उपयोग करते हैं। लेकिन अब प्रोटोटाइप_ऑब्जेक्ट में पहले से ही एक कंस्ट्रक्टर गुण है, और यह उस कन्स्ट्रक्टर फ़ंक्शन को इंगित करता है जिसके साथ प्रोटोटाइप जुड़ा हुआ है । इस स्थिति में विराट कैसे हो सकता है?

कहें, डॉग एक स्तनपायी है।

  समारोह स्तनपायी () {this.milk = true; };  

फ़ंक्शन कुत्ता () {this.bark = true; } Dog.prototype = new mammal;

तो कुत्ते के प्रोटोटाइप स्तनपायी के एक वस्तु को इंगित करता है यह स्तनपायी वस्तु उसके कन्स्ट्रक्टर के लिए एक संदर्भ है, जब कुत्ता नया है, जावास्क्रिप्ट देखता है कि कुत्ते प्रोटोटाइप एक स्तनपायी है, इसलिए स्तनधारी के कन्स्ट्रक्टर को एक वैध स्तनपायी वस्तु (दूसरा एक) बनाने के लिए कहा जाता है, तब इसे कुत्ता निर्माता के साथ एक कुत्ता वस्तु बनाते हैं।

इस से, dog.prototype के निर्माता एक स्तनपायी है (एक स्तनपायी वस्तु जिसमें अतिरिक्त फ़ील्ड और कार्यों को जोड़ा गया है) लेकिन dog है कुत्ते । विरासत मौजूद है क्योंकि कुत्ते की एक घटना एक प्रोटोटाइप के रूप में एक स्तनपायी है; इसलिए, कुत्ते एक स्तनपायी है जब किसी विधि को बुलाया जाता है और जेएस इसे dog.prototype से नहीं मिल सकता है, तो जेएस mammal.prototype में दिखता है (जो एक ऐसा ऑब्जेक्ट है जिसमें अतिरिक्त फ़ील्ड और फ़ंक्शन शामिल हैं)। < / P>

आशा है कि यह मदद करता है।


Comments

Popular posts from this blog

sql - dynamically varied number of conditions in the 'where' statement using LINQ -

asp.net mvc - Dynamically Generated Ajax.BeginForm -

Debug on symbian -