@Bergi erwähnt new.target.prototype
, aber ich suchte nach einem konkreten Beispiel, das beweist, dass Sie auf this
(oder besser auf den Verweis auf das Objekt, mit dem der Client-Code erstellt new
, siehe unten) zugreifen können , ohne überhaupt aufrufen super()
zu müssen.
Sprechen ist billig, zeig mir den Code ... Also hier ein Beispiel:
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)
Welches wird ausgegeben:
parentMethod()
childMethod()
this === obj ? true
obj instanceof A ? true
obj instanceof B ? true
So können Sie sehen , dass wir effektiv ein Objekt vom Typ erstellen B
(das Kind Klasse) , die auch ein Objekt vom Typ ist A
(seine Elternklasse) und innerhalb der childMethod()
von Kind B
haben wir this
auf das Objekt zeigen , obj
die wir in B erstellt constructor
mitObject.create(new.target.prototype)
.
Und das alles, ohne sich darum super
zu kümmern .
Dies nutzt die Tatsache, dass in JS a constructor
ein völlig anderes Objekt zurückgegeben werden kann, wenn der Clientcode eine neue Instanz mit erstelltnew
.
Hoffe das hilft jemandem.