Maison >interface Web >js tutoriel >Comment les appels de méthodes statiques se comportent-ils dans les classes ES6 avec héritage et remplacement ?

Comment les appels de méthodes statiques se comportent-ils dans les classes ES6 avec héritage et remplacement ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 17:28:02705parcourir

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

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

Dans les classes ES6, il existe deux manières courantes d'appeler des méthodes statiques : via le constructeur ou via le nom de la classe lui-même. Bien que les deux approches soient valides, elles présentent des comportements distincts dans le contexte de l'héritage avec des méthodes statiques remplacées.

L'utilisation de this.constructor pour faire référence à la propriété statique entraîne une répartition dynamique, ce qui signifie qu'elle fait référence à la classe du courant. exemple. Ceci est utile lorsqu'il s'agit de méthodes statiques remplacées, comme le montre l'exemple ci-dessous :

class Super {
  static whoami() {
    return "Super";
  }
}
class Sub extends Super {
  static whoami() {
    return "Sub";
  }
}

new Sub().whoami(); // "Sub"

Dans ce cas, la méthode statique whoami est remplacée dans la classe Sub. Lorsqu'il est appelé via this.constructor, il fait référence à la classe Sub et renvoie correctement "Sub".

D'autre part, l'utilisation du nom de la classe pour faire référence à la propriété statique garantit un accès constant à la méthode statique d'origine, même s'il est annulé. Par exemple :

class AnotherSuper {
  static whoami() {
    return "AnotherSuper";
  }
}
class AnotherSub extends AnotherSuper {
  static whoami() {
    return "AnotherSub";
  }
}

AnotherSub.whoami(); // "AnotherSuper"

Même si whoami est remplacé dans AnotherSub, l'appeler via le nom de la classe ("AnotherSub") renvoie toujours "AnotherSuper" car il fait référence à la propriété statique de la classe AnotherSuper.

En fin de compte, le choix de l’approche à utiliser dépend du comportement attendu. Si la propriété statique doit toujours faire référence à la classe actuelle, utilisez la référence explicite (this.constructor). Sinon, utilisez le nom de la classe pour garantir un accès constant à la méthode statique d'origine.

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!

Déclaration:
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