मैं यहाँ जावास्क्रिप्ट में विरासत का उपयोग करने के कोशिश कर रहा हूँ को बरकरार रखे हुए है, और मैं समस्या जनक में सरणी मान होने वर्ग है कि एक बाल वर्ग द्वारा विरासत में मिली है पाया। नीचे दिए गए कोड सामान्य विरासत है:जावास्क्रिप्ट विरासत: अभिभावकों की सरणी चर मूल्य
var Parent = function() {
this.list = [];
};
var Child = function() {};
Child.prototype = new Parent;
Child.prototype.constructor = Child;
var obj1 = new Child;
obj1.list.push("hello");
console.log(obj1.list); // prints ["hello"];
जब मैं नई बाल वस्तु प्रारंभ obj1 को और बढ़ाने के लिए obj1.list एक मूल्य के साथ की कोशिश की (जनक जो सरणी चर सूची नामित शामिल विरासत) " हैलो ", obj1.list प्रिंट [" हैलो "] .. अब तक बहुत अच्छा है।
समस्याआता है जब मैं ऊपर के उदाहरण से किया था और मैं तो धक्का obj2 के सूची एक मूल्य "अलविदा" के साथ obj2 करने के लिए नए बाल वस्तु प्रारंभ करने की कोशिश की, और obj2.list अब प्रिंट ["हैलो", "अलविदा"]। (नीचे दिए गए कोड :)
var obj2 = new Child;
obj2.list.push("goodbye");
console.log(obj2.list); // prints ["hello", "goodbye"];
मैं एक गलत धारणा है यहाँ है, लेकिन सूची सरणी देखें जनक में किसी भी तरह मूल्य को बनाए रखना है और मैं पता नहीं क्यों।
यह एक बहुत बड़ी मुसीबत क्योंकि अगर मैंने उपरोक्त मामले की तरह जनक का पुन: उपयोग कई अन्य बच्चे कक्षाओं में वर्ग, अगर जनक सरणी चर अपने बच्चे कक्षाओं के लिए साझा किया है, मूल्य अन्य बच्चे को साझा किया जाएगा है कक्षाएं भी, जो मेरे लिए अप्रत्याशित है।
मेरी अपेक्षा ही जब बाल वर्ग obj1, तो जो जब मैं नई बालobj2 करने के लिए वस्तु प्रारंभ करने में आरंभ नहीं हो जाता जनक वर्ग को जाता है बाल वर्ग नई वस्तु का प्रतिनिधित्व करता है,, obj1 से धक्का मूल्य obj2 के साथ साझा नहीं किया जाना चाहिए।
- प्रश्न -
किसी को भी मुझे यह पता लगाने क्यों सूची उदाहरण में (जनक की सरणी चर) ऊपर मूल्यों को बरकरार रखे हुए मदद कर सकते हैं/मूल्यों कि बाल द्वारा आरंभ किया जाता का हिस्सा ऑब्जेक्ट्स (उपरोक्त मामले में, obj1 और obj2)?
यदि आपके पास कोई अन्य समाधान है जो इस समस्या को हल कर सकता है, तो यह आपके लिए बहुत अच्छा होगा, लेकिन मुझे पहले समस्या को हल करने में खुशी होगी।
क्योंकि दोनों उदाहरण एक ही 'माता-पिता' उदाहरण को उनके प्रोटोटाइप के रूप में संदर्भित करते हैं और इसलिए एक ही सरणी में। यहां कई जावास्क्रिप्ट ओओपी प्रश्न हैं, आपको उन्हें देखना चाहिए। –
[संभावित रूप से जावास्क्रिप्ट के ओओपी को पूर्ववत करने के उदाहरण: संभावित उदाहरणों को संशोधित करने के उदाहरण] (http://stackoverflow.com/questions/4541788/undesrtanding-javascripts-oop-instances-modifying-other-instances) और [जावास्क्रिप्ट प्रोटोटाइप प्रॉपर्टी अपेक्षित के रूप में काम नहीं कर रही है) सरणी और ऑब्जेक्ट फ़ील्ड के साथ] (http://stackoverflow.com/questions/8230085/javascript-prototype-property-not-working-as-expected-with-array-and-object-fiel) –