24.3 Ajouter des propriétés à ses propres objets |
See You Why? |
Lorsque nous avons créé un objet, il peut s'avérer utile d'ajouter de nouveaux objets plus loin dans la programmation. JS a cette souplesse d'ajuster les objets selon les besoins de l'utilisateur.
De plus, il peut aussi s'avérer utile de préciser la description de nos objets... il faudra donc leur donner une nouvelle propriété. Une nouvelle propriété peut être ajoutée à une occurrence d'un objet - fournie par le système ou définie par le programmeur.
Cet ajout est effectué automatiquement lorsqu'on affecte une valeur à cette propriété.
Notre brave instituteur qui avait défini ses rectangles avec deux propriétés longueur
et largeur
, pourrait trouver utile d'avoir des rectangles qui disposent d'une nouvelle propriété, la couleur par exemple. Il lui suffirait d'écrire ceci :
o_monRect02.couleur = "rouge";
Attention cependant, cette facilité d'écriture a sa contrepartie... elle risque de générer des erreurs difficilement détectables... à bon entendeur... Par exemple utiliser l'expression o_monRect03.couleur
engendrerait une erreur si la propriété couleur
n'a pas été fixée par le programmeur pour l'objet o_monRect03
, ni pour aucun autre rectangle. En effet, la propriété couleur
n'a été fixée que pour l'objet o_monRect02
.
Rappelez-vous en... c'est une erreur difficile à retrouver en JS.
L'enseignant pourrait avoir besoin de deux autres propriétés pour chacun de ses objets... pardon, pour chacun de ses élèves, à savoir pour chacun, son code postal (zipcode) et la commune où il est domicilié (commune). Il lui suffirait d'écrire :
obba09.zipcode = "20004";
obba09.commune = "Washington DC";
Ici aussi, les propriétés zipcode
et commune
n'ont été définies que pour l'élève (ou objet) obba09
; aucun autre élève (ou objet) ne connait les propriétés zipcode
ou commune
.
On pourrait même imaginer une propriété propre à chaque élève et qui soit ses résultats dans toutes les disciplines enseignées... comment ??? On pourrait imaginer une propriété "resultat" qui soit un tableau de tableaux, mais ce ne sera possible qu'après nos chapitres 26 et suivants, relatifs aux tableaux.
S
Tous les objets JS, qu'ils soient prédéfinis ou définis par un programmeur, possèdent une propriété intrinsèque 'prototype' qui permet, entre autres, d'ajouter aussi bien de nouvelles propriétés que de nouvelles méthodes.
C'est un peu comme si on modifiait le profil type ou empreinte (appelé à l'époque prototype) de l'objet défini par la fonction que nous avons appelée 'constructeur' de l'objet.
Ainsi, si je souhaite que tous mes élèves aient par défaut comme propriété commune
la valeur "Washington DC"
, il me suffirait d'ajouter dans ma source (après mon constructeur et après les affectations pour chaque élève) :
eleve.prototype.commune = "Washington DC"
pour que tous mes élèves aient maintenant une nouvelle propriété commune
qui aura comme valeur "Washington DC"
... et rien n'empêche d'affecter une autre valeur pour l'un de mes élèves. Il suffirait alors de préciser : rero81.commune="Hollywood";
. Cela suffirait pour faire une exception et préciser que mon élève Ronald REAGAN habite Hollywood.
Et si aucune commune n'est sensée réapparaitre plus souvent qu'une autre, je pourrais très bien attribuer la propriété commune
qui aura comme valeur ""
... pour tous mes élèves, en écrivant: eleve.prototype.commune = "";
voir suite >>>
voir suite >>>