@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
।
आशा है कि यह किसी की मदद करता है।