2.7 Comprendre les classes
Après les imports/exports, nous découvrons une autre fonctionnalité essentielle du JavaScript moderne : les classes. Une classe est en quelque sorte un plan pour créer des objets. Elle peut contenir des propriétés (variables attachées à l'instance) et des méthodes (fonctions attachées à l'instance). En React, les classes ont longtemps servi à créer des composants.
Concepts clés d'une classe
- Déclaration avec le mot-clé class.
- Méthode spéciale constructor() pour initialiser.
- Mot-clé this pour accéder aux propriétés.
- Instanciation avec new MaClasse().
- Héritage avec extends et appel à super().
Le constructeur est exécuté automatiquement à chaque instanciation. On y initialise les propriétés avec this.maProp = ... Les méthodes se déclarent ensuite à l'intérieur du corps de la classe. Pour créer une nouvelle instance, on utilise le mot-clé new suivi du nom de la classe. Les classes supportent l'héritage avec extends : la classe enfant hérite des propriétés et méthodes du parent.
class Human {
constructor() {
this.gender = "male";
}
printGender() { console.log(this.gender); }
}
class Person extends Human {
constructor() {
super(); // OBLIGATOIRE dans la classe dérivée
this.name = "Mathieu";
}
printMyName() { console.log(this.name); }
}
const p = new Person();
p.printMyName(); // Mathieu
p.printGender(); // male
Un point important : si une classe étend une autre classe et définit son propre constructeur, elle doit obligatoirement appeler super() avant d'utiliser this. Sans cet appel, vous obtenez une erreur d'exécution. Les classes sont une alternative plus élégante aux fonctions constructeurs et au prototype. React les utilise pour créer ce qu'on appelle des composants de classe, que nous verrons plus loin dans le cours.
En résumé
Les classes JavaScript sont des modèles pour créer des objets, offrant une syntaxe plus pratique que les fonctions constructeurs traditionnelles. Elles encapsulent à la fois des propriétés (variables) et des méthodes (fonctions) qui s'exécutent lors de l'instantiation avec le mot-clé « new ». Les classes supportent l'héritage, permettant à une classe d'étendre une autre pour réutiliser ses propriétés et méthodes. React utilise les classes comme l'une des deux approches principales pour créer des composants.
Points clés
- Une classe est un plan pour créer des objets JavaScript contenant des propriétés et des méthodes attachées à chaque instance
- Le constructeur est une méthode spéciale qui s'exécute automatiquement lors de l'instantiation avec le mot-clé « new »
- L'héritage entre classes se fait avec le mot-clé « extends » et nécessite d'appeler « super() » dans le constructeur de la classe dérivée
- Les classes sont une évolution plus pratique et lisible des fonctions constructeurs JavaScript traditionnelles
- React utilise les classes pour créer des composants qui héritent de la classe React.Component
Questions fréquentes
Quelle est la différence entre une classe et une fonction constructeur ?
Les classes offrent une syntaxe plus pratique et lisible pour créer des objets, mais fonctionnent de manière similaire aux fonctions constructeurs. Les deux permettent de créer des objets JavaScript avec propriétés et méthodes attachées.
Pourquoi faut-il appeler « super() » dans une classe dérivée ?
Quand une classe étend une autre (héritage), le mot-clé « super() » appelle le constructeur de la classe parent pour initialiser ses propriétés. C'est obligatoire si la classe parent possède un constructeur que vous souhaitez utiliser.
Comment les classes sont-elles utilisées dans React ?
React utilise les classes comme l'une des deux manières de créer des composants. Les composants en classe héritent d'une classe React.Component et peuvent disposer de méthodes de cycle de vie. L'autre approche consiste à utiliser des composants fonctionnels avec les hooks.