Cette fonction fait partie du standard ECMAScript 2015 (ES6)
Cette technologie a été finalisée mais il est préférable de consulter le tableau de compatibilité pour connaître l'état de l'implémentation dans les différents navigateurs.
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 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 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 simpl | 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) | ? | ? | ? |