@Bergi mencionó new.target.prototype, pero estaba buscando un ejemplo concreto que demuestre que puede acceder this(o mejor, la referencia al objeto con el que está creando el código del cliente new, ver más abajo) sin tener que llamar super()en absoluto.
Hablar es barato, enséñame el código ... Así que aquí tienes un ejemplo:
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)
Que dará como resultado:
parentMethod()
childMethod()
this === obj ? true
obj instanceof A ? true
obj instanceof B ? true
Entonces, puede ver que estamos creando efectivamente un objeto de tipo B(la clase secundaria) que también es un objeto de tipo A(su clase principal) y dentro childMethod()del elemento secundario Btenemos thisapuntando al objeto objque creamos en B constructorcon Object.create(new.target.prototype).
Y todo esto sin importarle supernada.
Esto aprovecha el hecho de que en JS a constructorpuede devolver un objeto completamente diferente cuando el código del cliente construye una nueva instancia con new.
Espero que esto ayude a alguien.