मुझे लगता है कि मैं जेएस में प्रोटोटाइपिकल विरासत को समझता हूं लेकिन मेरे पास एक विशेष विचार दिखाने के लिए कोड लिखने में परेशानी हो रही है। इस अत्यंत सरल परिदृश्य में, जहां प्रबंधक वस्तुओं कर्मचारी वस्तुओं से निकाले जाते हैं पर विचार करें:प्रोटोटाइप के बिना प्रोटोटाइपिकल विरासत?
function Employee()
{
this.name = "Axel";
this.dept = "R&D";
}
function Manager()
{
Employee.call(this);
this.reports = ["Report 1", "Report 2", "Report 3"];
}
console.log(new Manager());
उत्पादन होता है:
Manager {name: "Axel", dept: "R&D", reports: Array[3]}
अजीब तरह से पर्याप्त है, यह है कि हम प्रोटोटाइप विरासत का प्रदर्शन में सफल रहा है मुझे लगता है। लेकिन तथ्यों का हमने उपयोग नहीं किया prototype
कहीं भी मुझे परेशान करता है। निश्चित रूप से उपर्युक्त कोड ऐसा करने का तरीका नहीं है?
क्या कोई ऐसा उदाहरण प्रदान कर सकता है जो उपर्युक्त दृष्टिकोण को विफल कर दिखाता है?
(वैसे, उदाहरण के आधिकारिक मोज़िला डॉक्स से आता है, शून्य से प्रोटोटाइप का सेटिंग: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model)
उपर्युक्त दृष्टिकोण में कुछ भी गलत नहीं है। इस मामले में आप केवल * एकल ऑब्जेक्ट * को संशोधित करते हैं, जबकि प्रोटोटाइप के साथ, आप उसी प्रोटोटाइप के साथ * सभी ऑब्जेक्ट्स * को संशोधित कर सकते हैं। – meskobalazs
@meskobalazs मुझे डर है कि मेरे क्लासिकली-प्रशिक्षित दिमाग का पालन नहीं करता है। यदि मैं 'नए प्रबंधक()' के बारे में लिखता हूं तो क्या मुझे तीनों गुण (नाम, डिप्टी और रिपोर्ट) नहीं मिलेंगे? इस प्रकार, ऐसा लगता है कि सड़क के नीचे __all ऑब्जेक्ट्स आगे संशोधित हैं। – dotslash
आप यहां प्रोटोटाइप या प्रोटोटाइपिकल विरासत का उपयोग नहीं कर रहे हैं। इसके बजाय, आप प्रत्येक व्यक्तिगत ऑब्जेक्ट पर सीधे गुण सेट कर रहे हैं। –