Ich denke, das ist nützlich, um auf statische Member zuzugreifen:
Unten ein Beispiel:
class A {
protected static type: string;
public log(): string {
console.log(this.type);
}
}
class B extends A {
protected static type: string = 'C';
}
class C extends A {
protected static type: string = 'C';
}
b = new B();
b.log(); // => 'B'
c = new C();
c.log(); // => 'C'
Wir können es nicht so machen, wie Sie es vorschlagen, da this.type
wird, um auf eine _Instanz_-Eigenschaft namens type
zuzugreifen, nicht auf eine _statische_-Eigenschaft.
Ihr Beispiel funktioniert jedoch, wenn Sie es wie folgt schreiben:
class A {
"constructor": typeof A; // Explicitly declare constructor property
protected static type: string;
public log() {
console.log(this.constructor.type); // Access actual constructor object
}
}
class B extends A {
protected static type: string = 'B';
}
class C extends A {
protected static type: string = 'C';
}
let b = new B();
b.log(); // => 'B'
let c = new C();
c.log(); // => 'C'
Standardmäßig hat die Eigenschaft constructor
einer Instanz den Typ Function
, aber Sie können sie auf eine Klasse spezialisieren, indem Sie sie manuell deklarieren. Sobald Sie dies getan haben, können Sie über this.constructor.xxx
auf die Statik zugreifen und erhalten die Eigenschaften des Konstruktorobjekts, das die Instanz tatsächlich erstellt hat (dh das abgeleitete Konstruktorobjekt).
Hilfreichster Kommentar
Wir können es nicht so machen, wie Sie es vorschlagen, da
this.type
wird, um auf eine _Instanz_-Eigenschaft namenstype
zuzugreifen, nicht auf eine _statische_-Eigenschaft.Ihr Beispiel funktioniert jedoch, wenn Sie es wie folgt schreiben:
Standardmäßig hat die Eigenschaft
constructor
einer Instanz den TypFunction
, aber Sie können sie auf eine Klasse spezialisieren, indem Sie sie manuell deklarieren. Sobald Sie dies getan haben, können Sie überthis.constructor.xxx
auf die Statik zugreifen und erhalten die Eigenschaften des Konstruktorobjekts, das die Instanz tatsächlich erstellt hat (dh das abgeleitete Konstruktorobjekt).