Une expression de classe est un moyen de définir une classe avec ECMASCript 2015 (ES6). Semblable aux expressions de fonctions, les expressions de classes peuvent être nommées ou anonymes. Si l'expression est nommée, le nom de la classe ne sera local que pour le corps de la fonction. Cette syntaxe n'est qu'un « sucre syntaxique » pour faciliter l'écriture du code, elle ne modifie en aucun cas le modèle d'héritage utilisé par JavaScript qui est un modèle à base de prototypes.

Syntaxe

var MaClasse = class [nomClasse] [extends] {
  // corps de la classe
};

Description

Une expression de classe utilise une syntaxe similaire à celle d'une instruction de classe. En revanche, avec les expressions de classes, il est possible de ne pas nommer la classe, ce qu'il est impossible de faire avec les instructions de classes. De plus, en utilisant les expressions de classe, on peut redéfinir/redéclarer les classes si nécessaire. Le type d'une classe sera toujours "function".

Le corps d'une classe sera exécuté en mode strict (pour les instructions et les expressions de classe).

Exemples

Une expression simple

Ici, on utilise une expression de classe anonyme qu'on lie à la variable Toto.

var Toto = class {
  constructor() {}
  truc() {
    return "Coucou monde !";
  }
};

var instance = new Toto();
instance.truc(); // "Coucou monde !"
Toto.name; // "Toto"

Des expressions nommées

Si on souhaite faire référence à la classe, au sein du corps de la classe, on pourra utiliser une expression nommée. Le nom utilisé ne sera visible que depuis l'intérieur de la portée de l'expression de classe.

// TBD
var Toto = class TotoNommé {
  constructor() {}
  quiEstLa() {
    return TotoNommé.name;
  }
}

var truc = new Toto;
truc.quiEstLa(); // "TotoNommmé"
TotoNommé.name;  // ReferenceError
Toto.name;       // "TotoNommé"

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 2016 (ECMA-262)
La définition de 'Class definitions' dans cette spécification.
Standard  
ECMAScript 2017 (ECMA-262)
La définition de 'Class definitions' dans cette spécification.
Standard  
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 42Edge Support complet OuiFirefox Support complet 45IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet 42Chrome Android Support complet 42Edge Mobile Support complet OuiFirefox Android Support complet 45Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet 4.0nodejs Support complet 6.0.0
Support complet 6.0.0
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
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
Dernière mise à jour par : SphinxKnight,