5.4 Caractère dynamique des objets

Une caractéristique fondamentale des objets en JavaScript : ils sont dynamiques. Une fois créés, on peut toujours leur ajouter de nouvelles propriétés ou méthodes, ou supprimer celles qui existent déjà. C'est très différent des langages où la forme d'un objet est figée par sa classe.

Ajouter et supprimer des membres

Partons d'un objet circle qui n'a qu'une propriété radius. Rien n'empêche d'y ajouter ensuite une propriété color, puis une méthode draw. À l'inverse, on peut retirer un membre avec l'opérateur delete.

const circle = { radius: 1 };
							
							circle.color = 'yellow';
							circle.draw = function() { console.log('draw'); };
							
							delete circle.color;
							delete circle.draw;
							
							console.log(circle); // { radius: 1 }

Le piège apparent de const

Un point qui déroute beaucoup de développeurs : ici, on a déclaré circle avec const, et pourtant on a modifié l'objet à plusieurs reprises. Comment est-ce possible ?

La réponse est subtile. const empêche la réaffectation de la variable, c'est-à-dire de faire pointer circle vers un autre objet. Mais ça n'empêche pas du tout de modifier le contenu de l'objet vers lequel circle pointe. Si on tentait circle = {}, on obtiendrait l'erreur classique « assignment to constant variable ». En revanche, ajouter ou supprimer des propriétés reste parfaitement autorisé.

Cette distinction entre variable constante et objet immuable est essentielle. Pour vraiment empêcher la modification d'un objet, JavaScript propose Object.freeze(), mais c'est un sujet pour plus tard. Pour l'instant, retenez surtout que les objets en JavaScript sont des structures vivantes que vous pouvez faire évoluer dynamiquement, même quand la référence est déclarée avec const.

En résumé

Cette leçon explique que les objets JavaScript sont dynamiques : il est possible d'ajouter, modifier ou supprimer des propriétés et des méthodes à tout moment, même après la création de l'objet. À travers un exemple concret avec un objet cercle, on découvre comment utiliser la notation pointée pour ajouter/modifier des propriétés et des méthodes, et l'opérateur delete pour les supprimer. La leçon clarifie un point crucial : une variable déclarée en const ne peut pas être réaffectée, mais l'objet qu'elle référence peut toujours être modifié.

Points clés

  • Les objets JavaScript sont dynamiques : on peut ajouter et supprimer des propriétés et des méthodes après la création de l'objet
  • Pour ajouter une propriété, utiliser la notation pointée (objet.propriété = valeur) même si la propriété n'existait pas
  • Pour ajouter une méthode, procéder identiquement en assignant une fonction (objet.methode = function() { ... })
  • L'opérateur delete supprime une propriété ou une méthode : delete objet.propriete
  • Une variable const empêche la réaffectation de la variable, non la modification de l'objet qu'elle référence
  • Cette distinction entre const et modification d'objet est source de confusion chez certains développeurs

Questions fréquentes

Peut-on vraiment modifier un objet déclaré en const ?

Oui. const empêche la réaffectation de la variable elle-même (cercle = nouvelObjet génère une erreur), mais on peut toujours ajouter, modifier ou supprimer les propriétés de cet objet (cercle.couleur = 'rouge' est autorisé).

Comment ajouter une propriété à un objet qui n'en avait pas à la création ?

Il suffit d'utiliser la notation pointée et d'assigner une valeur : objet.nouvelleProprieté = valeur. Cette syntaxe fonctionne pour ajouter n'importe quelle propriété dynamiquement.

Quel opérateur utiliser pour supprimer une propriété ou une méthode ?

L'opérateur delete : delete objet.propriete supprime immédiatement ce membre de l'objet, qu'il s'agisse d'une propriété ou d'une méthode.