जावास्क्रिप्ट में आपके पास कक्षाएं नहीं हैं लेकिन आप कई तरीकों से विरासत और व्यवहार का पुन: उपयोग कर सकते हैं:
छद्म-शास्त्रीय विरासत (प्रोटोटाइप के माध्यम से):
function Super () {
this.member1 = 'superMember1';
}
Super.prototype.member2 = 'superMember2';
function Sub() {
this.member3 = 'subMember3';
//...
}
Sub.prototype = new Super();
new
ऑपरेटर के साथ इस्तेमाल किया जाना चाहिए :
var subInstance = new Sub();
समारोह आवेदन या "निर्माता जंजीर":
function Super () {
this.member1 = 'superMember1';
this.member2 = 'superMember2';
}
function Sub() {
Super.apply(this, arguments);
this.member3 = 'subMember3';
}
इस दृष्टिकोण का उपयोग new
ऑपरेटर के साथ भी किया जाना चाहिए :
var subInstance = new Sub();
पहला उदाहरण के साथ अंतर यह है कि जब हम है करने के लिए निर्माता ऑब्जेक्ट के अंदर है, यह करने के लिए आवंटित गुण जुड़ जाते हैं पर सीधे नया उदाहरण पर, जैसे गुण होता है और सीधे (apply
Super
this
Sub
this
Super
subInstance
member1
member2
subInstance.hasOwnProperty('member1') == true;
)।
पहले उदाहरण में, उन गुणों को प्रोटोटाइप श्रृंखला के माध्यम से पहुंचा जाता है , वे एक आंतरिक [[Prototype]]
वस्तु पर मौजूद होते हैं ।
परजीवी विरासत या पावर कंस्ट्रक्टर:
function createSuper() {
var obj = {
member1: 'superMember1',
member2: 'superMember2'
};
return obj;
}
function createSub() {
var obj = createSuper();
obj.member3 = 'subMember3';
return obj;
}
यह दृष्टिकोण मूल रूप से "ऑब्जेक्ट संवर्द्धन" पर आधारित है, आपको new
ऑपरेटर का उपयोग करने की आवश्यकता नहीं है , और जैसा कि आप देख सकते हैं, this
कीवर्ड शामिल नहीं है।
var subInstance = createSub();
ECMAScript 5 वीं एड। Object.create
तरीका:
// Check if native implementation available
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {} // empty constructor
F.prototype = o; // set base object as prototype
return new F(); // return empty object with right [[Prototype]]
};
}
var superInstance = {
member1: 'superMember1',
member2: 'superMember2'
};
var subInstance = Object.create(superInstance);
subInstance.member3 = 'subMember3';
उपरोक्त विधि क्रोकफोर्ड द्वारा प्रस्तावित एक प्रोटोटाइप इनहेरिटेंस तकनीक है ।
ऑब्जेक्ट इंस्टेंस अन्य ऑब्जेक्ट इंस्टेंस से विरासत में मिला है, बस।
इस तकनीक को सरल "वस्तु वृद्धि" की तुलना में बेहतर हो सकता है क्योंकि विरासत में मिला गुण सब कुछ खत्म नई वस्तु उदाहरणों, के बाद से कॉपी नहीं किया गया आधार वस्तु के रूप में सेट किया गया है [[Prototype]]
की विस्तारित वस्तु, में ऊपर के उदाहरण subInstance
शारीरिक रूप से ही शामिल member3
संपत्ति।