यदि आप किसी भी प्रकार की विरासत करने की योजना बना रहे हैं, तो मैं सिफारिश करूंगा this.constructor
। यह सरल उदाहरण स्पष्ट करना चाहिए कि क्यों:
class ConstructorSuper {
constructor(n){
this.n = n;
}
static print(n){
console.log(this.name, n);
}
callPrint(){
this.constructor.print(this.n);
}
}
class ConstructorSub extends ConstructorSuper {
constructor(n){
this.n = n;
}
}
let test1 = new ConstructorSuper("Hello ConstructorSuper!");
console.log(test1.callPrint());
let test2 = new ConstructorSub("Hello ConstructorSub!");
console.log(test2.callPrint());
test1.callPrint()
ConstructorSuper Hello ConstructorSuper!
कंसोल पर लॉग इन करेंगे
test2.callPrint()
ConstructorSub Hello ConstructorSub!
कंसोल पर लॉग इन करेंगे
नामित वर्ग अच्छी तरह से विरासत के साथ सौदा नहीं करेगा जब तक कि आप स्पष्ट रूप से हर फ़ंक्शन को फिर से परिभाषित नहीं करते हैं जो नामित वर्ग का संदर्भ बनाता है। यहाँ एक उदाहरण है:
class NamedSuper {
constructor(n){
this.n = n;
}
static print(n){
console.log(NamedSuper.name, n);
}
callPrint(){
NamedSuper.print(this.n);
}
}
class NamedSub extends NamedSuper {
constructor(n){
this.n = n;
}
}
let test3 = new NamedSuper("Hello NamedSuper!");
console.log(test3.callPrint());
let test4 = new NamedSub("Hello NamedSub!");
console.log(test4.callPrint());
test3.callPrint()
NamedSuper Hello NamedSuper!
कंसोल पर लॉग इन करेंगे
test4.callPrint()
NamedSuper Hello NamedSub!
कंसोल पर लॉग इन करेंगे
बाबेल आरईपीएल में उपर्युक्त सभी देखें ।
आप इस से देख सकते हैं कि test4
अभी भी लगता है कि यह सुपर क्लास में है; इस उदाहरण में यह एक बहुत बड़ी बात नहीं हो सकती है, लेकिन यदि आप ऐसे सदस्य कार्यों को संदर्भित करने का प्रयास कर रहे हैं जो अतिरंजित या नए सदस्य चर हैं, तो आप खुद को परेशानी में पाएंगे।
SomeObject.print
स्वाभाविक लगता है। लेकिनthis.n
अंदर कोई मतलब नहीं है क्योंकि कोई उदाहरण नहीं है, अगर हम स्थैतिक तरीकों के बारे में बात कर रहे हैं।