--- 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")}}.
extends
Ce 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")}}