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.
Exemple interactif
class DateFormatter extends Date {
getFormattedDate() {
const months = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
];
return `${this.getDate()}-${months[this.getMonth()]}-${this.getFullYear()}`;
}
}
console.log(new DateFormatter("August 19, 1975 23:15:30").getFormattedDate());
// Expected output: "19-Aug-1975"
Syntaxe
class ClasseFille extends ClasseParente { ... }
Description
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 Object
ou null
.
Exemples
>Utiliser <code>extends</code>
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;
}
}
Utiliser <code>extends</code> avec des objets natifs
Dans l'exemple suivant, on crée l'équivalent d'une sous-classe pour 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.
Étendre <code>null</code>
Étendre null
se fait comme avec une classe normale sauf que l'objet prototype n'hérite pas de Object.prototype
.
class extensionNull extends null {
constructor() {}
}
Object.getPrototypeOf(extensionNull); // Function.prototype
Object.getPrototypeOf(extensionNull.prototype); // null
new extensionNull(); // ReferenceError