5.3 Fonction Contructeur
Dans cette vidéo, vous découvrez un second pattern de création d'objets : la fonction constructeur. Le but est identique à celui d'une factory function — construire et retourner un objet —, mais la mécanique interne et les conventions de nommage diffèrent.
Convention PascalCase
Les factory functions suivent la convention camelCase : première lettre du premier mot en minuscule, première lettre de chaque mot suivant en majuscule (createCircle). Pour les fonctions constructeur, on utilise PascalCase : la première lettre de chaque mot est en majuscule (Circle). Cette différence n'est pas qu'esthétique : elle signale aux autres développeurs qu'il faut appeler la fonction avec new.
Le mot-clé this et l'opérateur new
Au lieu de retourner explicitement un objet, on utilise this, qui est une référence à l'objet en cours d'exécution. Les objets en JavaScript étant dynamiques, on peut leur ajouter des propriétés et des méthodes après création — c'est exactement ce qu'on fait dans le corps du constructeur.
function Circle(radius) {
this.radius = radius;
this.draw = function() {
console.log('draw');
};
}
const circle = new Circle(1);
circle.draw();
Quand on utilise l'opérateur new, trois choses se produisent en interne : (1) un objet vide est créé, (2) this est lié à cet objet pour la durée de la fonction, (3) l'objet est automatiquement retourné. Si l'on appelle la fonction sans new, this pointera par défaut sur l'objet global (window dans un navigateur), ce qui produit des bugs subtils.
Quel pattern choisir
Les deux patterns sont équivalents en termes de résultats. La fonction constructeur sera plus familière aux développeurs venant de C#, Java ou autres langages orientés objet classiques. La factory function plaît à ceux qui préfèrent un style fonctionnel et apprécient de ne pas avoir à se soucier de this. Choisissez celui qui vous parle le plus — l'important est de rester cohérent dans une même base de code.
En résumé
Cette leçon explique le modèle des fonctions constructeur en JavaScript, un pattern alternatif aux factory functions pour créer des objets. Elle couvre la convention de nommage PascalCase, le rôle du mot-clé `new` (qui crée un objet vide, assigne `this`, puis retourne l'objet), et les différences clés entre les deux approches de création d'objets.
Points clés
- Les fonctions constructeur sont un modèle de création d'objets utilisant la convention PascalCase (ex: Circle) pour différencier des factory functions en camelCase
- Le mot-clé `new` automatise trois opérations : créer un objet vide, assigner `this` à cet objet, puis retourner l'objet à la sortie de la fonction
- Contrairement aux factory functions qui retournent explicitement un objet, les fonctions constructeur laissent `this` manipuler les propriétés du nouvel objet
- Les objets JavaScript sont dynamiques : on peut ajouter des propriétés et des méthodes après la création de l'objet
- Les deux modèles (factory functions et fonctions constructeur) sont équivalents en termes de fonctionnalité ; le choix dépend de la convention et de la familiarité linguistique du développeur
Questions fréquentes
Quelle est la différence entre une fonction constructeur et une factory function ?
Les factory functions retournent explicitement un objet et suivent la convention camelCase (ex: createCircle). Les fonctions constructeur utilisent le mot-clé `new` pour automatiser la création et la mutation d'un objet via `this`, suivant la convention PascalCase (ex: Circle). Les deux produisent le même résultat, mais avec des approches syntaxiques différentes.
Quel est le rôle précis du mot-clé `new` en JavaScript ?
Le mot-clé `new` exécute trois étapes en séquence : (1) crée un objet vide, (2) assigne la référence `this` à cet objet vide, permettant à la fonction d'y ajouter des propriétés et des méthodes, (3) retourne automatiquement cet objet sans nécessiter un `return` explicite.
Peut-on ajouter des propriétés ou des méthodes à un objet après sa création ?
Oui. Les objets JavaScript sont dynamiques ; on peut ajouter ou modifier des propriétés et des méthodes à tout moment après la création de l'objet, que l'objet provienne d'une fonction constructeur ou d'une factory function.