| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/super | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis mars 2016.
Le mot-cl super est utilis afin d'appeler ou d'accder des fonctions dfinies sur l'objet parent.
Les expressions de la forme super.propriete et super[expr] sont valides pour n'importe quelle dfinition de mthode, que ce soit au sein d'une classe ou d'un littral objet.
super([arguments]); // Le constructeur parent est appel
super.functionOnParent([arguments]);
Lorsqu'il est utilis dans un constructeur, le mot-cl super est utilis seul et doit apparatre avant le mot-cl this. Ce mot-cl peut galement tre utilis afin d'appeler des fonctions sur un objet parent.
super avec les classesCe fragment de code est tir de cet exemple. Ici on utilise super() afin d'viter la duplication des parties communes entre le constructeur de Rectangle et de Carre.
class Rectangle {
constructor(hauteur, largeur) {
this.name = "Rectangle";
this.hauteur = hauteur;
this.largeur = largeur;
}
coucou() {
console.log("Coucou, je suis un " + this.name + ".");
}
get aire() {
return this.hauteur * this.largeur;
}
set aire(valeur) {
this.hauteur = Math.sqrt(valeur);
this.largeur = Math.sqrt(valeur);
}
}
class Carre extends Rectangle {
constructor(longueur) {
// Ici, on appelle le constructeur de Rectangle
// qui est l'objet parent de Carr
super(longueur, longueur);
// Pour les classes drives, super() doit tre appel
// avant d'utiliser 'this' sinon cela entranera une
// exception ReferenceError.
this.name = "Carr";
}
}
Il est possible d'utiliser super pour invoquer des mthodes statiques :
class Rectangle {
constructor() {}
static logNbCotes() {
return "J'ai 4 cts";
}
}
class Carre extends Rectangle {
constructor() {}
static logDescription() {
return super.logNbCotes() + " qui sont tous gaux";
}
}
Carre.logDescription(); // "J'ai 4 cts qui sont tous gaux"
Il n'est pas possible d'utiliser l'oprateur delete sur super.prop ou super[expr] pour supprimer une proprit de la classe parente, cela renverra une exception ReferenceError :
class Base {
toto() {}
}
class Derivee extends Base {
delete() {
delete super.toto; // ne pas faire
}
}
new Derivee().delete();
// ReferenceError : suppression invalide avec 'super'
super.prop ne peut pas surcharger les proprits non modifiablesLorsque des proprits sont dfinies sans accs en criture (non-writable), par exemple avec Object.defineProperty(), super ne peut pas surcharger les valeurs de ces proprits.
class X {
constructor() {
Object.defineProperty(this, "prop", {
configurable: true,
writable: false,
value: 1,
});
}
}
class Y extends X {
constructor() {
super();
}
toto() {
super.prop = 2; // Impossible de surcharger
}
}
const y = new Y();
y.toto(); // TypeError "prop" est en lecture seule
console.log(y.prop); // 1
super.prop sur les littraux objetssuper peut galement tre utilis avec la notation littrale. Dans l'exemple qui suit, deux objets dfinissent chacun une mthode. Le deuxime objet utilise super pour appeler la mthode du premier objet. Cela fonctionne grce Object.setPrototypeOf() avec lequel on dfinit que le prototype de obj2 est obj1. De cette faon, super peut parcourir la chane de prototypes et trouver methode1 dans obj1.
const obj1 = {
methode1() {
console.log("mthode 1");
},
};
const obj2 = {
methode2() {
super.methode1();
},
};
Object.setPrototypeOf(obj2, obj1);
obj2.methode2(); // affiche "mthode 1" dans la console
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-super-keyword |
Cette page a t modifie le 3 aot 2023 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |