@Bergi กล่าวถึงnew.target.prototypeแต่ผมกำลังมองหาตัวอย่างที่เป็นรูปธรรมพิสูจน์ให้เห็นว่าคุณสามารถเข้าถึงthis(หรือดีกว่าการอ้างอิงไปยังวัตถุที่รหัสลูกค้าคือการสร้างที่มีnewให้ดูด้านล่าง) โดยไม่ต้องเรียกsuper()ทุก
พูดคุยราคาถูกแสดงรหัส ... ดังนั้นนี่คือตัวอย่าง:
class A {
constructor() {
this.a = 123;
}
parentMethod() {
console.log("parentMethod()");
}
}
class B extends A {
constructor() {
var obj = Object.create(new.target.prototype)
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ที่เราสร้างขึ้นในบีด้วยconstructorObject.create(new.target.prototype)
และทั้งหมดนี้โดยไม่ต้องสนใจsuperเลย
นี้ใช้ประโยชน์จากความจริงที่ว่าใน JS สามารถกลับวัตถุที่แตกต่างกันอย่างสมบูรณ์เมื่อรหัสลูกค้าสร้างอินสแตนซ์ใหม่ที่มีconstructornew
หวังว่านี่จะช่วยใครบางคนได้