--- title: extends slug: Web/JavaScript/Reference/Classes/extends tags: - ECMAScript 2015 - JavaScript - Reference translation_of: Web/JavaScript/Reference/Classes/extends ---
Le mot-clé extends est utilisé dans les déclarations et expressions de classes afin de signifier qu'un type représenté par une classe hérite d'un autre type.
class ClasseFille extends ClasseParente { ... }
Le mot-clé extends peut être utilisé pour créer des sous-classes de classes existantes (natives ou non).
La propriété .prototype d'une classe fille (aussi appelée une extension) doit être un {{jsxref("Object")}} ou {{jsxref("null")}}.
extendsCe fragment de code est tiré de cet exemple et crée une classe Carré qui hérite de Polygone :
class Carré extends Polygone {
constructor(longueur) {
// On utilise le constructeur de la classe parente
// avec le mot-clé super
super(longueur, longueur);
// Pour les classes dérivées, super() doit être appelé avant de
// pouvoir utiliser 'this' sinon cela provoque une exception
// ReferenceError
this.nom = 'Carré';
}
get aire() {
return this.hauteur * this.largeur;
}
}
extends avec des objets natifsDans l'exemple suivant, on crée l'équivalent d'une sous-classe pour {{jsxref("Date")}} :
class maDate extends Date {
constructor() {
super();
}
getFormattedDate() {
var mois = ['Jan','Fév','Mar','Avr','Mai','Juin','Juil','Août','Sep','Oct','Nov','Déc'];
return this.getDate() + "-" + mois[this.getMonth()] + "-" + this.getFullYear();
}
}
Ces exemples sont extraits de ces deux pages : démonstration, source.
nullÉtendre {{jsxref("null")}} se fait comme avec une classe normale sauf que l'objet prototype n'hérite pas de {{jsxref("Object.prototype")}}.
class extensionNull extends null {
constructor() {}
}
Object.getPrototypeOf(extensionNull); // Function.prototype
Object.getPrototypeOf(extensionNull.prototype); // null
new extensionNull(); // ReferenceError
| Spécification | État | Commentaires |
|---|---|---|
| {{SpecName('ES2015', '#sec-class-definitions', 'extends')}} | {{Spec2('ES2015')}} | Définition initiale. |
| {{SpecName('ESDraft', '#sec-class-definitions', 'extends')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.classes.extends")}}