यदि आपने जावास्क्रिप्ट में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की है, तो आप जानेंगे कि आप निम्नानुसार एक क्लास बना सकते हैं:
Person = function(id, name, age){
this.id = id;
this.name = name;
this.age = age;
alert('A new person has been accepted');
}
अब तक हमारे वर्ग के व्यक्ति के पास केवल दो गुण हैं और हम इसे कुछ तरीके देने जा रहे हैं। ऐसा करने का एक साफ तरीका अपनी 'प्रोटोटाइप' ऑब्जेक्ट का उपयोग करना है। जावास्क्रिप्ट 1.1 से शुरू होकर प्रोटोटाइप ऑब्जेक्ट को जावास्क्रिप्ट में पेश किया गया था। यह एक अंतर्निहित वस्तु है जो किसी वस्तु के सभी उदाहरणों में कस्टम गुण और विधियों को जोड़ने की प्रक्रिया को सरल बनाता है। आइए इसकी कक्षा में 'प्रोटोटाइप' ऑब्जेक्ट का उपयोग करते हुए 2 तरीकों को इस प्रकार जोड़ें:
Person.prototype = {
wake_up: function() {
alert('I am awake');
},
get_age: function() {
return this.age;
}
}
अब हमने अपने वर्ग के व्यक्ति को परिभाषित किया है। क्या होगा अगर हम प्रबंधक नामक एक अन्य वर्ग को परिभाषित करना चाहते हैं जो व्यक्ति से कुछ गुण प्राप्त करता है। इस सभी गुणों को फिर से परिभाषित करने का कोई मतलब नहीं है जब हम अपने प्रबंधक वर्ग को परिभाषित करते हैं, तो हम इसे वर्ग व्यक्ति से विरासत में प्राप्त कर सकते हैं। जावास्क्रिप्ट ने विरासत में नहीं बनाया है, लेकिन हम विरासत को लागू करने के लिए एक तकनीक का उपयोग इस प्रकार कर सकते हैं:
Inheritance_Manager = {};
// हम एक विरासत प्रबंधक वर्ग बनाते हैं (नाम मनमाना है)
अब हम अपने वंशानुक्रम वर्ग को एक विधि देते हैं जिसे विस्तार कहते हैं जो बेसक्लास और सबक्लास तर्कों को लेता है। विस्तार विधि के भीतर, हम इनहेरिटेंस फंक्शन इनहेरिटेंस () {} नामक एक आंतरिक वर्ग बनाएंगे। हम इस आंतरिक वर्ग का उपयोग क्यों कर रहे हैं इसका कारण बेसक्लास और सबक्लास प्रोटोटाइप के बीच भ्रम से बचना है। अगला हम निम्नलिखित कोड के साथ बेसक्लास प्रोटोटाइप के रूप में अपने उत्तराधिकार वर्ग बिंदु का प्रोटोटाइप बनाते हैं: उत्तराधिकार।प्रोटाइप = बेसक्लास। प्रोटोटाइप; फिर हम उप-प्रोटो प्रोटोटाइप में इनहेरिटेंस प्रोटोटाइप को निम्नानुसार कॉपी करते हैं: सबक्लास.प्रोटोटाइप = नई विरासत (); अगली बात यह है कि हमारे उप-निर्माण के लिए कंस्ट्रक्टर को इस प्रकार निर्दिष्ट करना है: सबक्लास.प्रोटाइप.कंस्ट्रक्टर = उपक्लास; एक बार हमारे सबक्लास प्रोटोटाइप के साथ समाप्त होने के बाद, हम कुछ बेस क्लास पॉइंटर्स सेट करने के लिए कोड की अगली दो पंक्तियों को निर्दिष्ट कर सकते हैं।
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
यहाँ हमारे विस्तार समारोह के लिए पूर्ण कोड है:
Inheritance_Manager.extend = function(subClass, baseClass) {
function inheritance() { }
inheritance.prototype = baseClass.prototype;
subClass.prototype = new inheritance();
subClass.prototype.constructor = subClass;
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
}
अब जब हमने अपनी विरासत को लागू कर दिया है, तो हम अपनी कक्षाओं का विस्तार करने के लिए इसका उपयोग करना शुरू कर सकते हैं। इस मामले में हम अपने व्यक्तिगत वर्ग को एक प्रबंधक वर्ग में निम्नानुसार विस्तारित करने जा रहे हैं:
हम प्रबंधक वर्ग को परिभाषित करते हैं
Manager = function(id, name, age, salary) {
Person.baseConstructor.call(this, id, name, age);
this.salary = salary;
alert('A manager has been registered.');
}
हम इसे व्यक्तिगत रूप बनाते हैं
Inheritance_Manager.extend(Manager, Person);
यदि आपने गौर किया है, तो हमने अपने इनहेरिटैंस_मैनेजर क्लास की विस्तार विधि को कॉल किया है और हमारे मामले में उप-प्रबंधक और उसके बाद बेसक्लास पर्सन को पास किया है। ध्यान दें कि यहां आदेश बहुत महत्वपूर्ण है। यदि आप उन्हें अदला-बदली करते हैं, तो विरासत आपके अनुसार काम नहीं करेगी। यह भी ध्यान दें कि आपको वास्तव में हमारे उपवर्ग को परिभाषित करने से पहले इस विरासत को निर्दिष्ट करने की आवश्यकता होगी। अब हम अपने उपवर्ग को परिभाषित करते हैं:
हम नीचे दिए गए तरीकों के रूप में और अधिक तरीके जोड़ सकते हैं। हमारे प्रबंधक वर्ग के पास हमेशा व्यक्ति वर्ग में परिभाषित तरीके और गुण होंगे क्योंकि यह उससे विरासत में मिला है।
Manager.prototype.lead = function(){
alert('I am a good leader');
}
अब इसका परीक्षण करने के लिए, हम दो ऑब्जेक्ट बनाते हैं, एक क्लास पर्सन से और एक विरासत क्लास मैनेजर से:
var p = new Person(1, 'Joe Tester', 26);
var pm = new Manager(1, 'Joe Tester', 26, '20.000');
फुल कोड और अधिक टिप्पणियाँ प्राप्त करने के लिए स्वतंत्र महसूस करें:
http://www.cyberminds.co.uk/blog/articles/how-to-implement-javascript-inheritance.aspx