@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
ที่เราสร้างขึ้นในบีด้วยconstructor
Object.create(new.target.prototype)
และทั้งหมดนี้โดยไม่ต้องสนใจsuper
เลย
นี้ใช้ประโยชน์จากความจริงที่ว่าใน JS สามารถกลับวัตถุที่แตกต่างกันอย่างสมบูรณ์เมื่อรหัสลูกค้าสร้างอินสแตนซ์ใหม่ที่มีconstructor
new
หวังว่านี่จะช่วยใครบางคนได้