--- title: class slug: Web/JavaScript/Reference/Instructions/class tags: - Classes - ECMAScript 2015 - Instruction - JavaScript - Reference translation_of: Web/JavaScript/Reference/Statements/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.
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 !
Il est aussi possible de définir une classe avec une {{jsxref("Opérateurs/class", "expression class","",1)}}.
class nom [extends]{ // corps de la classe }
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).
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écification | État | Commentaires |
---|---|---|
{{SpecName('ES2015', '#sec-class-definitions', 'Définitions de classe')}} | {{Spec2('ES2015')}} | Définition initiale. |
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2016')}} | |
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2017')}} | |
{{SpecName('ESDraft', '#sec-class-definitions', 'Définitions de classe')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.statements.class")}}