Heim  >  Artikel  >  Web-Frontend  >  Wie verhalten sich statische Methodenaufrufe in ES6-Klassen mit Vererbung und Überschreibung?

Wie verhalten sich statische Methodenaufrufe in ES6-Klassen mit Vererbung und Überschreibung?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-17 17:28:02635Durchsuche

How do Static Method Calls Behave in ES6 Classes with Inheritance and Overriding?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn