static

Le mot-clé static permet de 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 (ECMA-262)
La définition de 'Class definitions' dans cette spécification.
Standard évolutif  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
staticChrome Support complet 49
Support complet 49
Aucun support 42 — 49
Notes
Notes Strict mode is required.
Aucun support 42 — 49
Désactivée
Désactivée From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Support complet 13Firefox Support complet 45IE Aucun support NonOpera Support complet 36
Support complet 36
Aucun support 29 — 36
Notes
Notes Strict mode is required.
Aucun support 29 — 36
Désactivée
Désactivée From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari Support complet 9WebView Android Support complet 49
Support complet 49
Aucun support 42 — 49
Notes
Notes Strict mode is required.
Chrome Android Support complet 49
Support complet 49
Aucun support 42 — 49
Notes
Notes Strict mode is required.
Aucun support 42 — 49
Désactivée
Désactivée From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Firefox Android Support complet 45Opera Android Support complet 36
Support complet 36
Aucun support 29 — 36
Notes
Notes Strict mode is required.
Aucun support 29 — 36
Désactivée
Désactivée From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari iOS Support complet 9Samsung Internet Android Support complet 5.0
Support complet 5.0
Aucun support 4.0 — 5.0
Notes
Notes Strict mode is required.
nodejs 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
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