Heim >Web-Frontend >js-Tutorial >Wie rufe ich statische Methoden aus nichtstatischen ES6-Klassenmethoden auf?

Wie rufe ich statische Methoden aus nichtstatischen ES6-Klassenmethoden auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-28 01:03:11246Durchsuche

How to Call Static Methods from Non-Static ES6 Class Methods?

Aufrufen statischer Methoden aus nicht-statischen ES6-Klassenmethoden

Bei der Arbeit mit ES6-Klassen müssen Sie möglicherweise auf statische Methoden zugreifen innerhalb nicht statischer Klassenmethoden. Um dies zu erreichen, gibt es im Wesentlichen zwei Möglichkeiten: die Verwendung des Konstruktors oder die direkte Bezugnahme auf den Klassennamen. Obwohl beide Methoden technisch machbar sind, weisen sie im Zusammenhang mit der Vererbung mit überschriebenen statischen Methoden unterschiedliche Verhaltensweisen auf.

Option 1: Verwendung des Konstruktors

class SomeObject {
  constructor(n) {
    this.n = n;
  }

  static print(n) {
    console.log(n);
  }

  printN() {
    this.constructor.print(this.n);
  }
}

Hier Der Zugriff auf die statische Methode print erfolgt beispielsweise über den Konstruktor this.constructor. Dieser Ansatz stellt sicher, dass die richtige statische Methode aufgerufen wird, auch wenn die Klasse erweitert wird und die statische Methode in der Unterklasse überschrieben wird.

Option 2: Direkt auf den Klassennamen verweisen

class SomeObject {
  constructor(n) {
    this.n = n;
  }

  static print(n) {
    console.log(n);
  }

  printN() {
    SomeObject.print(this.n);
  }
}

In diesem Fall wird die statische Methode print durch ihren Klassennamen referenziert. Diese Methode ist im Wesentlichen statisch und gibt immer den in der Klasse definierten Originalwert zurück, unabhängig von etwaigen Vererbungsbeziehungen.

Überlegungen zur Vererbung und Überschreibung

Die Wahl zwischen der Verwendung des Konstruktors oder der Klassenname wird direkt wichtig, wenn es um Vererbung und überschriebene statische Methoden geht, wie dargestellt unten:

class Super {
  static whoami() {
    return "Super";
  }
  lognameA() {
    console.log(Super.whoami());
  }
  lognameB() {
    console.log(this.constructor.whoami());
  }
}
class Sub extends Super {
  static whoami() {
    return "Sub";
  }
}

Fall 1: Verwendung von Super.whoami()

  • new Sub().lognameA(); gibt „Super“ aus, da es sich auf die in der Super-Klasse definierte statische Methode bezieht.
  • new Sub().lognameB(); gibt auch „Super“ aus, da es die Konstruktorreferenz verwendet und die Unterklasse keine überschriebene Whoami-Methode erbt.

Fall 2: Verwendung von this.constructor.whoami()

  • new Sub().lognameA(); gibt „Sub“ aus, da es direkt auf die statische Methode in der aktuellen Unterklasse verweist.
  • new Sub().lognameB(); gibt aus dem gleichen Grund „Sub“ aus.

Das Verhalten in diesen Szenarien kann variieren, je nachdem, ob die statische Methode tatsächlich überschrieben wird oder nicht. Der Verweis auf die statische Eigenschaft über den Klassennamen sorgt für echtes statisches Verhalten, während die Verwendung von this.constructor dynamische Dispatch- und Vererbungsüberlegungen ermöglicht. Die Wahl der geeigneten Methode hängt vom gewünschten Verhalten im jeweiligen Kontext ab.

Das obige ist der detaillierte Inhalt vonWie rufe ich statische Methoden aus nichtstatischen ES6-Klassenmethoden auf?. 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