Maison >interface Web >js tutoriel >Comment les appels de méthodes statiques se comportent-ils dans les classes ES6 avec héritage et remplacement ?
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!