class

La déclaration class crée une nouvelle classe avec le nom fourni en utilisant l'héritage à base de prototypes pour émuler le fonctionnement de classe.

Il est aussi possible de définir une classe avec une expression class.

Syntaxe

class nom [extends]{
  // corps de la classe
}

Description

Les déclarations qui composent le corps de la classe sont exécutées en mode strict. La propriété du constructeur est optionnelle.

Les déclarations utilisées dans les classes ne sont pas remontées (hoisted) (à la différence des déclarations de fonctions).

Exemples

Déclarer une classe simple

Dans l'exemple qui suit, on définit une classe Polygone pour laquelle on crée un sous-classe Carré. On note ici que la méthode super() ne peut être utilisée qu'au sein d'un constructeur et doit être appelée avant l'utilisation du mot-clé this.

class Polygone {
  constructor(hauteur, largeur) {
    this.nom = 'Polygone';
    this.hauteur = hauteur;
    this.largeur = largeur;
  }
}

class Carré extends Polygone {
  constructor(longueur) {
    super(longueur,longueur);
    this.nom = 'Carré';
  }
}

Attention : Déclarer une classe deux fois lèvera une exception SyntaxError. De même, on ne pourra pas réutiliser un nom qui a déjà été utilisé dans une expression de classe.

// Deux déclarations avec le même nom
class Toto {};
class Toto {}; // Uncaught SyntaxError: Identifier 'Toto' has already been declared

// Expression puis déclaration
var Truc = class {};
class Truc {}; // Uncaught TypeError: Identifier 'Truc' has already been declared

Spécifications

Spécification État Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Définitions de classe' 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 (ECMA-262)
La définition de 'Définitions de classe' 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
classChrome 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 10.1WebView 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 10.3Samsung 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

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