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 mais sont appelées sur la classe elle-même. Les méthodes statiques sont généralement des fonctions utilitaires (qui peuvent permettre de créer ou de cloner des objets par exemple).

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 Latest Draft (ECMA-262)
La définition de 'Class definitions' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Support simpleChrome Support complet 49
Notes
Support complet 49
Notes
Notes From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Edge Support complet 13Firefox Support complet 45IE Aucun support NonOpera Support complet 36Safari Support complet 9WebView Android ? Chrome Android Support complet OuiEdge Mobile Support complet 13Firefox Android Support complet 45Opera Android ? Safari iOS Support complet 9Samsung Internet Android Support complet Ouinodejs Support complet 6.0.0
Support complet 6.0.0
Support complet 4.0.0
Désactivée
Désactivée From version 4.0.0: this feature is behind the --use_strict runtime flag.
Support complet 5.0.0
Désactivée
Désactivée From version 5.0.0: this feature is behind the --harmony runtime flag.

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Voir les notes d'implémentation.
Voir les notes d'implémentation.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.

Voir aussi

Étiquettes et contributeurs liés au document

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