Aufrufen statischer Methoden aus ES6-Klassenmethoden
In ES6-Klassen gibt es zwei gängige Möglichkeiten, statische Methoden aufzurufen: über den Konstruktor oder über der Klassenname selbst. Obwohl beide Ansätze gültig sind, zeigen sie unterschiedliche Verhaltensweisen im Zusammenhang mit der Vererbung mit überschriebenen statischen Methoden.
Die Verwendung von this.constructor zum Verweisen auf die statische Eigenschaft führt zu einem dynamischen Versand, was bedeutet, dass er auf die Klasse des Stroms verweist Beispiel. Dies ist nützlich, wenn es um überschriebene statische Methoden geht, wie im folgenden Beispiel zu sehen ist:
class Super { static whoami() { return "Super"; } } class Sub extends Super { static whoami() { return "Sub"; } } new Sub().whoami(); // "Sub"
In diesem Fall wird die statische Whoami-Methode in der Sub-Klasse überschrieben. Wenn es über this.constructor aufgerufen wird, verweist es auf die Sub-Klasse und gibt korrekt „Sub“ zurück.
Andererseits stellt die Verwendung des Klassennamens zum Verweisen auf die statische Eigenschaft einen ständigen Zugriff auf die ursprüngliche statische Methode sicher. auch wenn es überschrieben ist. Zum Beispiel:
class AnotherSuper { static whoami() { return "AnotherSuper"; } } class AnotherSub extends AnotherSuper { static whoami() { return "AnotherSub"; } } AnotherSub.whoami(); // "AnotherSuper"
Auch wenn whoami in AnotherSub überschrieben wird, wird beim Aufruf über den Klassennamen („AnotherSub“) immer noch „AnotherSuper“ zurückgegeben, da es sich auf die statische Eigenschaft der AnotherSuper-Klasse bezieht.
Letztendlich hängt die Wahl des zu verwendenden Ansatzes vom erwarteten Verhalten ab. Wenn die statische Eigenschaft immer auf die aktuelle Klasse verweisen soll, verwenden Sie die explizite Referenz (this.constructor). Andernfalls verwenden Sie den Klassennamen, um einen ständigen Zugriff auf die ursprüngliche statische Methode sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie verhalten sich statische Methodenaufrufe in ES6-Klassen mit Vererbung und Überschreibung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!