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); } }
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); } }
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"; } }
Cas 1 : Utilisation de Super.whoami()
Cas 2 : Utilisation de this.constructor.whoami()
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!