नहीं प्रोटोटाइप मैं बहुत प्रोटोटाइप विरासत हासिल करने के लिए शास्त्रीय js तरह से करने के बजाय object.create का उपयोग कर के लिए नया हूँ।Object.create __proto__ की स्थापना लेकिन
var baseObject = {
test : function(){
console.log('Child');
}
}
var newObject = Object.create(baseObject);
newObject.test = function(){
console.log('Parent');
this.__proto__.test();
}
console.log(newObject);
newObject.test();
का उत्पादन इस (वेब उपकरण में उत्पादन का अनुकरण):
क्रोम में कम से कम मैं निम्नलिखित कोड देख कर हैरान था
Object {test: function, test: function}
test: function(){
__proto__: Object
test: function(){
__proto__: Object
Parent
Child
तो तुम यह प्रोटोटाइप की स्थापना नहीं कर रहा है देखते हैं लेकिन इसके बजाय केवल "__proto__", जिसे मैंने सोचा था इसके उपयोग में निराश था। आप देख सकते हैं कि मेरे कोड में मैं ठीक से विरासत में करने में सक्षम हूँ, और पैरेंट ऑब्जेक्ट फोन है, लेकिन केवल "__proto__" का उपयोग। एक त्रुटि (अपरिभाषित) में "प्रोटोटाइप" परिणामों का उपयोग करना।
यहां क्या हो रहा है? मैं object.create "प्रोटोटाइप" स्थापित करेगा बजाय के रूप में है कि मानक है (या तो मैं मान लिया था) लगा। यह पॉपुलटिंग क्यों कर रहा है और मुझे "__proto__"
बहुत रोचक। आप सही हैं मैं प्रोटोटाइप केवल कार्यों पर लागू भूल गया। तो अनिवार्य रूप से, कम से कम क्रोम, __proto__ प्रकार का उपयोग गैर-मानक तरीके से योजना वस्तुओं के लिए प्रोटोटाइप को दोहराता है? – nahelm
@nahelm: क्रमबद्ध करें। '__proto__' आपको मौजूदा ऑब्जेक्ट को एक नई प्रोटोटाइप श्रृंखला देने देता है। कन्स्ट्रक्टर फ़ंक्शंस और 'ऑब्जेक्ट.क्रेट' बस ऑब्जेक्ट बनने के समय इसे सेट अप करने देते हैं। वहां से यह स्थायी है। वास्तव में, यदि आप कन्स्ट्रक्टर फ़ंक्शन से कोई ऑब्जेक्ट बनाते हैं, तो आप कन्स्ट्रक्टर को एक नया 'प्रोप्रोटाइप' ऑब्जेक्ट देते हैं, जो ऑब्जेक्ट आपने पहले से बनाया है वह अभी भी मूल का संदर्भ देगा। यह कभी नहीं बदलता है। –
मुझे लगता है कि मैं अंततः इसे प्राप्त कर रहा हूं। मेरे भ्रम का एक हिस्सा यह था कि मैंने क्रोम में अपने वेब टूल्स को ऑब्जेक्ट के प्रोटोटाइप को दिखाने के लिए उम्मीद की थी। मैंने कुछ मूर्खतापूर्ण कारणों के बारे में भी सोचा कि नए कीवर्ड का उपयोग करने से आप प्रोटोटाइप कीवर्ड (आपके उदाहरण में f.prototype) का उपयोग कर सकते हैं, जो सत्य नहीं है। जब मैंने आपका फू उदाहरण किया और इसके प्रोटोटाइप में एक फ़ंक्शन जोड़ा, तो यह कंसोल logproto__ ऑब्जेक्ट में भी दिखाई देता है जब मैं console.log (f) करता हूं। इसलिए इस मामले में अनिवार्य रूप से __proto__ प्रोटोटाइप श्रृंखला का खुलासा करता है जो आम तौर पर छिपा हुआ होता है और जैसा कि आपने स्थायी कहा था। – nahelm