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).
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
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
| Ordinateur | Mobile | Serveur | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
static | Chrome
Support complet
49
| Edge Support complet 13 | Firefox Support complet 45 | IE Aucun support Non | Opera Support complet 36 | Safari Support complet 9 | WebView Android
Support complet
49
| Chrome Android
Support complet
49
| Firefox Android Support complet 45 | Opera Android ? | Safari iOS Support complet 9 | Samsung Internet Android Support complet Oui | nodejs
Support complet
6.0.0
|
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é.