जावास्क्रिप्ट में प्रोटोटाइप डिज़ाइन पैटर्न एक रचनात्मक पैटर्न है जो आपको किसी मौजूदा ऑब्जेक्ट ("प्रोटोटाइप") को स्क्रैच से बनाने के बजाय क्लोन करके नई ऑब्जेक्ट बनाने की अनुमति देता है, जो कार्य करता है एक प्रोटोटाइप. यह पैटर्न विशेष रूप से जावास्क्रिप्ट के लिए उपयुक्त है, क्योंकि जावास्क्रिप्ट स्वयं एक प्रोटोटाइप-आधारित भाषा है और तब उपयोगी होती है जब ऑब्जेक्ट निर्माण महंगा होता है या जब आप एक ऑब्जेक्ट बनाना चाहते हैं जो बेस प्रोटोटाइप के साथ कुछ गुणों को साझा करता है।
ES6 कक्षाएं वस्तुओं की संरचना को समझना आसान बनाती हैं। एक्सटेंड्स का उपयोग करना इनहेरिटेंस को सरल बनाता है लेकिन ES6 से पहले, इसे इनहेरिट करने और लागू करने के लिए प्रोटोटाइप का उपयोग किया जाता था। इस अवधारणा को समझने के लिए यहां ब्लॉग है।
पीएस: जावास्क्रिप्ट में प्रोटोटाइप डिज़ाइन पैटर्न में, कोई अंतर्निहित क्लोन() विधि नहीं है जैसा कि कुछ अन्य भाषाओं (उदाहरण के लिए, जावा) में है। हालाँकि, आप समान कार्यक्षमता प्रदान करने के लिए अपने प्रोटोटाइप या कंस्ट्रक्टर फ़ंक्शन में मैन्युअल रूप से क्लोन() विधि लागू कर सकते हैं।
प्रोटोटाइप पैटर्न के पीछे का विचार यह है:
प्रोटोटाइप: एक टेम्पलेट ऑब्जेक्ट जिससे नई ऑब्जेक्ट बनाई जाती हैं।
क्लोनिंग: प्रोटोटाइप की प्रतिलिपि बनाकर नई वस्तुएं बनाई जाती हैं।
प्रोटोटाइप श्रृंखला: वस्तुएं अपने प्रोटोटाइप को व्यवहार सौंप सकती हैं
class Shape { constructor(type = 'Generic Shape', color = 'White') { this.type = type; this.color = color; } getDetails() { return `Type: ${this.type}, Color: ${this.color}`; } // Clone method to create a new object with the same prototype clone() { return Object.create(this); // Creates a new object that inherits from this prototype } }
स्पष्टीकरण:
उद्देश्य: आकार वर्ग एक आधार वर्ग या "प्रोटोटाइप" के रूप में कार्य करता है जिससे वृत्त या आयत जैसी विशिष्ट आकृतियाँ विरासत में मिल सकती हैं।
क्लोन() विधि: यह प्रोटोटाइप पैटर्न का एक महत्वपूर्ण हिस्सा है। शुरुआत से किसी वर्ग का एक नया उदाहरण बनाने के बजाय, हम मौजूदा उदाहरण (या "प्रोटोटाइप") का एक क्लोन बनाते हैं। इस मामले में, ऑब्जेक्ट.क्रिएट(यह) एक नया ऑब्जेक्ट बनाता है जो मूल आकार के समान प्रोटोटाइप साझा करता है।
class Circle extends Shape { constructor(radius = 0, color = 'White') { super('Circle', color); // Calls the parent (Shape) constructor this.radius = radius; } getArea() { return Math.PI * this.radius * this.radius; } }
स्पष्टीकरण:
उद्देश्य: वृत्त वर्ग आकार वर्ग का विस्तार करता है और एक विशिष्ट प्रकार के आकार का प्रतिनिधित्व करता है।
गुण:
getArea() विधि: यह सूत्र π * त्रिज्या^2 का उपयोग करके वृत्त के क्षेत्रफल की गणना करता है।
class Rectangle extends Shape { constructor(width = 0, height = 0, color = 'White') { super('Rectangle', color); // Calls the parent (Shape) constructor this.width = width; this.height = height; } getArea() { return this.width * this.height; } }
स्पष्टीकरण:
उद्देश्य: आयत वर्ग आकार वर्ग का विस्तार करता है और एक अन्य विशिष्ट प्रकार के आकार (एक आयत) का प्रतिनिधित्व करता है।
const circlePrototype = new Circle(); // Create prototype const myCircle = circlePrototype.clone(); // Clone the prototype myCircle.radius = 5; myCircle.color = 'Red'; const rectanglePrototype = new Rectangle(); // Create prototype const myRectangle = rectanglePrototype.clone(); // Clone the prototype myRectangle.width = 10; myRectangle.height = 5; myRectangle.color = 'Blue';
स्पष्टीकरण:
यहां, नए कीवर्ड का उपयोग करके स्क्रैच से मायसर्कल और मायरेक्टेंगल ऑब्जेक्ट बनाने के बजाय, हम प्रोटोटाइप क्लोन कर रहे हैं।
क्लोनिंग प्रक्रिया:
क्लोन किए गए उदाहरणों को संशोधित करना:
console.log(myCircle.getDetails()); // Output: Type: Circle, Color: Red console.log(`Circle Area: ${myCircle.getArea()}`); // Output: Circle Area: 78.54 console.log(myRectangle.getDetails()); // Output: Type: Rectangle, Color: Blue console.log(`Rectangle Area: ${myRectangle.getArea()}`); // Output: Rectangle Area: 50
स्पष्टीकरण:
प्रोटोटाइप पैटर्न तब उपयोगी होता है जब:
यदि आप यहां तक पहुंच गए हैं?✨, किसी भी प्रश्न या विचार के साथ नीचे टिप्पणी करें। मुझे आपकी बातें सुनना और कुछ बेहतरीन चर्चाओं में शामिल होना अच्छा लगेगा!✨
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3