Maison > interface Web > js tutoriel > Comment appeler des méthodes statiques à partir de méthodes de classe ES6 non statiques ?

Comment appeler des méthodes statiques à partir de méthodes de classe ES6 non statiques ?

Mary-Kate Olsen
Libérer: 2024-11-28 01:03:11
original
315 Les gens l'ont consulté

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

Appel de méthodes statiques à partir de méthodes de classe ES6 non statiques

Lorsque vous travaillez avec des classes ES6, vous pouvez rencontrer le besoin d'accéder à des méthodes statiques à partir de dans les méthodes de classe non statiques. Il existe deux options principales pour y parvenir : utiliser le constructeur ou faire référence directement au nom de la classe. Bien que l'une ou l'autre méthode soit techniquement viable, elles présentent des comportements différents dans le contexte de l'héritage avec des méthodes statiques remplacées.

Option 1 : Utiliser le constructeur

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

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

  printN() {
    this.constructor.print(this.n);
  }
}
Copier après la connexion

Dans ce Par exemple, la méthode statique print est accessible via le constructeur this.constructor. Cette approche garantit que la méthode statique correcte est invoquée, même si la classe est étendue et que la méthode statique est remplacée dans la sous-classe.

Option 2 : Se référer directement au nom de la classe

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

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

  printN() {
    SomeObject.print(this.n);
  }
}
Copier après la connexion

Dans ce cas, la méthode statique print est référencée par son nom de classe. Cette méthode est essentiellement statique et renvoie toujours la valeur d'origine définie dans la classe, quelles que soient les relations d'héritage.

Considérations sur l'héritage et le remplacement

Le choix entre l'utilisation du constructeur ou le nom de la classe devient directement important lorsqu'il s'agit d'héritage et de méthodes statiques remplacées, comme illustré ci-dessous :

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";
  }
}
Copier après la connexion

Cas 1 : Utilisation de Super.whoami()

  • new Sub().lognameA(); affiche "Super", car il fait référence à la méthode statique définie dans la classe Super.
  • new Sub().lognameB(); imprime également "Super", car il utilise la référence du constructeur et la sous-classe n'hérite pas d'une méthode whoami remplacée.

Cas 2 : Utilisation de this.constructor.whoami()

  • new Sub().lognameA(); imprime "Sub", car il fait directement référence à la méthode statique dans la sous-classe actuelle.
  • new Sub().lognameB(); imprime "Sub" pour la même raison.

Le comportement dans ces scénarios peut varier selon que la méthode statique est réellement remplacée ou non. Le référencement de la propriété statique via le nom de la classe fournit un véritable comportement statique, tandis que l'utilisation de this.constructor permet des considérations de répartition dynamique et d'héritage. Le choix de la méthode appropriée dépend du comportement souhaité dans le contexte donné.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal