@Bergi l'a mentionné new.target.prototype, mais je cherchais un exemple concret prouvant que vous pouvez accéder this(ou mieux, la référence à l'objet avec lequel le code client crée new, voir ci-dessous) sans avoir à appeler super()du tout.
Parler c'est pas cher, montrez-moi le code ... Voici donc un exemple:
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)
Qui produira:
parentMethod()
childMethod()
this === obj ? true
obj instanceof A ? true
obj instanceof B ? true
Ainsi, vous pouvez voir que nous créons effectivement un objet de type B(la classe enfant) qui est également un objet de type A(sa classe parent) et dans le childMethod()of child Bnous avons thispointé vers l'objet objque nous avons créé dans B's constructoravecObject.create(new.target.prototype) .
Et tout cela sans se soucier superdu tout.
Cela tire parti du fait que dans JS, a constructorpeut renvoyer un objet complètement différent lorsque le code client construit une nouvelle instance avecnew .
J'espère que cela aide quelqu'un.