static

Le mot-clé static permet définir une méthode statique d'une classe. Les méthodes statiques ne sont pas disponibles sur les instances d'une classe.

Syntaxe

static nomMéthode() { ... }

Description

Les méthodes statiques sont utilisées lorsque la méthode ne s'applique qu'à la classe elle-même et pas à ses instances. Les méthodes statiques sont généralement utilisées pour créer des fonctions utilitaires.

Exemples

Exemple classique

Dans l'exemple qui suit, on illustre :

  • comment une classe implémente une méthode statique
  • comment une classe avec une propriété statique peut être déclinée avec une sous-classe
  • comment une méthode statique peut ou ne peut pas être appelé
class Triple {
  static triple(n) {
    if (n === undefined) {
      n = 1;
    }
    return n * 3;
  }
}

class SuperTriple extends Triple {
  static triple(n) {
    return super.triple(n) * super.triple(n);
  }
}

console.log(Triple.triple());       // 3
console.log(Triple.triple(6));      // 18
console.log(SuperTriple.triple(4)); // 144
var tp = new Triple();
console.log(SuperTriple(triple(4)); // 144 (pas d'impact de l'affectation du parent)
console.log(tp.triple()); // tp.triple n'est pas une fonction

Utilisation depuis une autre méthode statique

Afin d'appeler une autre méthode statique dans une méthode statique, on pourra utiliser this.

class StaticMethodCall {
  static staticMethod() {
    return 'Méthode statique appelée';
  }
  static anotherStaticMethod() {
    return this.staticMethod() + ' depuis une autre statique';
  }
}
StaticMethodCall.staticMethod(); 
// 'Méthode statique appelée'
StaticMethodCall.anotherStaticMethod(); 
// 'Méthode statique appelée depuis une autre statique'

Depuis les constructeurs de classes et les autres méthodes

Les méthodes statiques ne sont pas directement accessibles via le mot-clé this. Il faut les appeler avec le nom de la classe qui préfixe le nom de la méthode statique NomDeClasse.MéthodeStatique() (comme pour les autres appels en dehors de la classe) ou avec la propriété constructor  : this.constructor.MéthodeStatique().

class StaticMethodCall{
  constructor(){
    console.log(StaticMethodCall.staticMethod()); 
    // 'appel de la méthode statique' 
        
    console.log(this.constructor.staticMethod()); 
    // 'appel de la méthode statique' 
  }

  static  staticMethod(){
    return 'appel de la méthode statique.';
  }
}

Spécifications

Spécification État Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Class definitions' dans cette spécification.
Standard Définition initiale.
ECMAScript 2017 Draft (ECMA-262)
La définition de 'Class definitions' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple 42.0 45 (45) ? ? ?
Fonctionnalité Android Webview Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple Pas de support 42.0 42.0 45.0 (45) ? ? ?

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, ericallard0
 Dernière mise à jour par : SphinxKnight,