त्वरित पृष्ठभूमि: जावास्क्रिप्ट में, प्रत्येक ऑब्जेक्ट प्रकार के लिए निर्माता फ़ंक्शन में एक prototype
संपत्ति होती है। prototype
एक वस्तु को संदर्भित करता है कि अपने प्रोटोटाइप श्रृंखला में अगला कदम अप के रूप में प्रत्येक निर्माण वस्तु का उपयोग करता है। जब आप एक प्रकार को दूसरे प्रकार से अंतर्निहित करना चाहते हैं, तो आप prototype
बच्चे के प्रकार को माता-पिता के प्रकार के एक नए उदाहरण में सेट कर सकते हैं ।
उदाहरण के लिए:
var Parent = function() { /* constructor business */ }
Parent.prototype.parentProp = "some parent property";
var Child = function() { /* constructor business */ }
Child.prototype = /*** !! Some prototype object goes here !! ***/
मेरा प्रश्न इस बारे में पूछता है कि Some prototype object goes here
उपरोक्त कोड में " " कोड किस स्थान पर जाना चाहिए । मेरी पहली वृत्ति माता-पिता (यानी new Parent()
) का एक उदाहरण का निर्माण करना है , लेकिन इस पर एक जवाब में एक टिप्पणी है कि क्या यह एक वस्तुओं के प्रोटोटाइप को दूसरे की नकल करने का एक सुरक्षित तरीका है? , एक उपयोगकर्ता लिखते हैं:
नहीं,
new bar()
प्रोटोटाइप ऑब्जेक्ट के लिए उपयोग न करें !
((जो कि एक राय है जो मैंने कई एसओ उत्तर और टिप्पणियों में देखी है, लेकिन यह एकमात्र उदाहरण है जो मेरे हाथ में है।)
अन्य विकल्प के Object.create(Parent.prototype)
रूप में उपयोग करना है Child.prototype
। जहां तक मुझे पता है, यह एक नया Parent
उदाहरण भी बनाता है , लेकिन यह Parent
कंस्ट्रक्टर को नहीं चलाता है ।
क्या कोई समझा सकता है कि माता-पिता के प्रकार से प्रोटोटाइप ऑब्जेक्ट बनाते समय कंस्ट्रक्टर फ़ंक्शन को चलाने से क्यों बचा जाना चाहिए? क्या कुछ महत्वपूर्ण तकनीकी समस्या है जो (शायद विरासत के कई स्तरों के साथ) उत्पन्न होती है? या इस तरह का पैटर्न कंस्ट्रक्टर्स का दुरुपयोग है जो कुछ प्रोटोटाइपिक प्रैक्टिस के साथ टकराता है (उदाहरण के लिए, प्रोटोटाइप बनाते समय कंस्ट्रक्टर को चलाना कुछ चिंताओं को अलग करता है)?
Object.create
लागू किया जाता है।