Opérateur new en JavaScript
Introduction aux constructeurs et à l'opérateur new
En JavaScript, les constructeurs sont des fonctions conçues pour initialiser les objets nouvellement créés. Ils jouent un rôle central dans la programmation orientée objet en permettant aux développeurs de définir les propriétés et comportements que doivent posséder les objets d'une certaine classe. L'opérateur new est utilisé pour créer une instance d'un objet à partir d'une fonction constructeur, en mettant en place un nouvel environnement d'objet basé sur le prototype spécifié et en exécutant le constructeur pour initialiser le nouvel objet.
Fonctionnement des constructeurs
Une fonction constructeur en JavaScript ressemble à toute autre fonction, mais elle est conventionnellement nommée avec une majuscule pour la distinguer des fonctions régulières. Lorsque l'opérateur new invoque une fonction constructeur, plusieurs choses se produisent :
- Création d'un nouvel objet : JavaScript crée automatiquement un nouvel objet pour vous.
- Définition du prototype : Cet nouvel objet est configuré pour suivre un modèle, qui est le prototype de la fonction constructeur. Cela signifie qu'il hérite des propriétés et méthodes définies à cet endroit.
- Exécution du constructeur : La fonction constructeur s'exécute avec les arguments que vous passez, et à l'intérieur de cette fonction,
thisfait référence au nouvel objet qui vient d'être créé. - Retour de l'objet : Après avoir accompli sa tâche, le nouvel objet est automatiquement retourné, sauf si vous retournez explicitement un objet différent depuis le constructeur.
INFO
Le JavaScript moderne utilise la syntaxe class pour définir les constructeurs et les méthodes de manière plus intuitive. Cela offre une approche plus simple, basée sur les classes, similaire à d'autres langages de programmation.
Exemple : fonction constructeur de base
Explication : Dans cet exemple, User est une fonction constructeur qui initialise name, age et une méthode greet sur les objets nouvellement créés. L'instruction new User('John', 30) crée une nouvelle instance de User avec le nom « John » et l'âge 30.
Utilisation des constructeurs pour des objets complexes
Les constructeurs peuvent être utilisés pour établir des relations plus complexes entre les objets, y compris des méthodes qui interagissent avec d'autres propriétés des objets.
Exemple : constructeur avec des méthodes
Explication : Le constructeur Car configure chaque objet voiture avec des propriétés spécifiques et une méthode qui affiche des informations sur la voiture.
Exemple : méthodes de prototype
Explication : En ajoutant introduce au prototype de Employee, toutes les instances partagent la même méthode, ce qui est plus économe en mémoire que de la définir directement dans le constructeur.
WARNING
Il est recommandé d'utiliser les classes ES6 pour définir les objets et les constructeurs afin d'obtenir un code plus propre et plus lisible.
Bonnes pratiques avec les constructeurs
Lorsque vous travaillez avec des constructeurs en JavaScript, le respect de certaines bonnes pratiques peut grandement améliorer la lisibilité, l'efficacité et l'évolutivité de votre code. Ci-dessous, ces pratiques sont détaillées avec des exemples et des explications :
1. Convention de nommage
Bonne pratique : Commencez toujours les noms des constructeurs par une majuscule pour les différencier des fonctions régulières. Il s'agit d'une convention courante en JavaScript et dans de nombreux autres langages de programmation qui aide les développeurs à identifier rapidement les fonctions constructeurs.
Exemple :
Explication : La fonction constructeur Laptop commence par une majuscule, indiquant qu'elle est destinée à être utilisée avec l'opérateur new pour créer de nouveaux objets.
2. Séparation de la logique
Bonne pratique : Pour les méthodes qui n'ont pas besoin d'accéder aux données d'instance individuelles, définissez-les sur le prototype du constructeur plutôt que dans le constructeur lui-même. Cette approche permet d'économiser de la mémoire car toutes les instances partagent la même méthode au lieu que chaque instance crée une nouvelle fonction en mémoire.
Exemple :
Explication : La méthode describe est ajoutée au prototype de Book, ce qui signifie que toutes les instances de Book partagent la même méthode describe. Cela est plus efficace que si describe était définie à l'intérieur du constructeur, ce qui résulterait en une nouvelle fonction pour chaque instance de livre.
3. Valeurs de retour
Bonne pratique : Évitez de retourner des valeurs depuis les constructeurs. Les constructeurs JavaScript retournent automatiquement l'instance d'objet nouvellement créée, sauf si vous retournez explicitement un objet différent. Le retour de valeurs non-objets (comme une chaîne ou un nombre) n'aura aucun effet, et la nouvelle instance sera tout de même retournée.
Exemple :
Explication : Malgré la tentative de retourner une chaîne depuis le constructeur Player, JavaScript ignore cette valeur de retour car il ne s'agit pas d'un objet. La nouvelle instance Player est retournée comme prévu.
Conclusion
Comprendre et utiliser les constructeurs et l'opérateur new en JavaScript est essentiel pour une programmation orientée objet efficace. En suivant les conventions et bonnes pratiques décrites ici, les développeurs peuvent créer un code organisé, efficace et évolutif. Les constructeurs offrent un mécanisme puissant pour initialiser de nouveaux objets et définir leur comportement de manière structurée et intuitive.
Pratique
Que se passe-t-il lorsqu'une fonction est exécutée avec 'new' en JavaScript ?