class

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2016.

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.

Exemple interactif

class Polygon {
  constructor(height, width) {
    this.area = height * width;
  }
}

console.log(new Polygon(4, 3).area);
// Expected output: 12

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

Syntaxe

js
class nom [extends autreNom] {
  // 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.

js
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.

js
// 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

Specification
ECMAScript® 2025 Language Specification
# sec-class-definitions

Compatibilité des navigateurs

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
class

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Has more compatibility info.

Voir aussi