@Bergi ने उल्लेख किया है new.target.prototype, लेकिन मैं एक ठोस उदाहरण की तलाश कर रहा था जो यह साबित कर रहा हो कि आप thisजिस क्लाइंट कोड के साथ निर्माण कर रहे हैं new, उसका संदर्भ ( नीचे देख सकते हैं, नीचे देखें) बिना कॉल किए super()।
बात सस्ती है, मुझे कोड दिखाओ ... तो यहाँ एक उदाहरण है:
class A { // Parent
constructor() {
this.a = 123;
}
parentMethod() {
console.log("parentMethod()");
}
}
class B extends A { // Child
constructor() {
var obj = Object.create(new.target.prototype)
// You can interact with obj, which is effectively your `this` here, before returning
// it to the caller.
return obj;
}
childMethod(obj) {
console.log('childMethod()');
console.log('this === obj ?', this === obj)
console.log('obj instanceof A ?', obj instanceof A);
console.log('obj instanceof B ?', obj instanceof B);
}
}
b = new B()
b.parentMethod()
b.childMethod(b)
जो आउटपुट देगा:
parentMethod()
childMethod()
this === obj ? true
obj instanceof A ? true
obj instanceof B ? true
तो आप देख सकते हैं कि हम प्रभावी रूप से एक प्रकार की वस्तु B(चाइल्ड क्लास) बना रहे हैं, जो कि एक प्रकार की वस्तु भी है A(इसका मूल वर्ग) और childMethod()बच्चे के अंदर Bहम thisउस वस्तु की ओर इशारा करते हैं objजिसे हमने बी के constructorसाथ बनाया है Object.create(new.target.prototype)।
और यह सब परवाह किए बिना super।
यह इस तथ्य का लाभ उठाता है कि जेएस constructorमें एक पूरी तरह से अलग वस्तु वापस आ सकती है जब ग्राहक कोड के साथ एक नया उदाहरण बनाता है new।
आशा है कि यह किसी की मदद करता है।