@Bergi đã đề cập new.target.prototype, nhưng tôi đang tìm kiếm một ví dụ cụ thể chứng minh rằng bạn có thể truy cập this(hoặc tốt hơn, tham chiếu đến đối tượng mà mã máy khách đang tạo new, xem bên dưới) mà không cần phải gọi super().
Nói là rẻ, cho tôi xem mã ... Vì vậy, đây là một ví dụ:
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)
Cái nào sẽ xuất ra:
parentMethod()
childMethod()
this === obj ? true
obj instanceof A ? true
obj instanceof B ? true
Vì vậy, bạn có thể thấy rằng chúng ta đang tạo hiệu quả một đối tượng kiểu B(lớp trẻ) cũng là một đối tượng kiểu A(lớp cha của nó) và trong childMethod()các con Bchúng tôi đã thistrỏ đến đối tượng objmà chúng tôi tạo ra trong B constructorvới Object.create(new.target.prototype).
Và tất cả những điều này mà không cần quan tâm đến superchút nào.
Điều này thúc đẩy thực tế là trong JS, a constructorcó thể trả về một đối tượng hoàn toàn khác khi mã máy khách tạo một phiên bản mới với new.
Hy vọng điều này sẽ giúp ai đó.