Héritage de propriétés

  • Raccourci de la révision : JavaScript//Guide/L'exemple_de_l'employé/Propriétés_des_objets/Héritage_de_propriétés
  • Titre de la révision : Héritage de propriétés
  • ID de la révision : 275307
  • Créé :
  • Créateur : Julien.stuby
  • Version actuelle ? Non
  • Commentaire /* Héritage de propriétés */

Contenu de la révision

Héritage de propriétés

Supposons que l'objet marc ait été créé en tant que Collaborateur comme montré dans la Figure 8.3 à l'aide de l'instruction suivante :

marc = new Collaborateur;

Lorsque JavaScript voit l'opérateur new, un nouvel objet générique est créé et est passé comme paramètre en tant que valeur du mot-clé this à la fonction constructeur de Collaborateur. La fonction constructeur définit explicitement la valeur des propriétés de l'objet. Elle définit également la valeur de la propriété interne __proto__ comme étant Collaborateur.prototype. (Ce nom de propriété commence et se termine par deux caractères de soulignement.) La propriété __proto__ détermine la chaîne de prototypes utilisée pour renvoyer les valeurs de propriétés. Une fois que ces propriétés ont été définies, JavaScript renvoie le nouvel objet et l'instruction d'assignation fait pointer la variable marc vers cet objet.

Ce procédé ne place pas explicitement de valeurs dans l'objet marc (des valeurs locales) car les propriétés de marc sont héritées depuis la chaîne de prototypes. Lorsque vous demandez la valeur d'une propriété, JavaScript vérifie d'abord si la valeur existe dans cet objet. Si c'est le cas, elle est renvoyée. Si la valeur n'est pas présente localement, JavaScript parcourt la chaîne de prototypes (à l'aide de la propriété __proto__). Si un objet dans la chaîne de prototypes a une valeur pour la propriété, celle-ci est renvoyée. Si aucune propriété n'est trouvée, JavaScript répond que l'objet n'a pas cette propriété. De cette manière, l'objet marc dispose des propriétés et valeurs suivantes :

marc.nom = "";
marc.département = "géneral";
marc.projets = [];

L'objet marc hérite de valeurs pour les propriétés nom et département de l'objet prototype indiqué par marc.__proto__. Il reçoit également une valeur locale pour la propriété projets via le constructeur Collaborateur. C'est ce qui permet l'héritage de propriétés et de valeurs en JavaScript. Certaines subtilités de ce processus sont détaillées dans Retour sur l'héritage de propriétés.

Étant donné que ces constructeurs ne permettent pas de fournir des valeurs spécifiques à une instance, cette information est générique. Les valeurs de propriétés sont celles qui sont partagées par défaut par tous les objets créés depuis Collaborateur. Il est évidemment possible de changer les valeurs de n'importe laquelle de ces propriétés. Ainsi, vous pourriez donner des informations spécifiques à marc de cette façon :

marc.nom = "Dupont, Marc";
marc.département = "admin";
marc.projets = ["navigateur"];


{{wiki.template('PrécédentSuivant', [ "Guide JavaScript 1.5:L\'exemple de l\'employé:Propriétés des objets", "Guide JavaScript 1.5:L\'exemple de l\'employé:Propriétés des objets:Ajout de propriétés" ])}}

{{ wiki.languages( { "en": "en/Core_JavaScript_1.5_Guide/The_Employee_Example/Object_Properties/Inheriting_Properties", "es": "es/Gu\u00eda_JavaScript_1.5/El_ejemplo_Employee/Propiedades_de_objetos/Heredando_las_propiedades", "ja": "ja/Core_JavaScript_1.5_Guide/The_Employee_Example/Object_Properties/Inheriting_Properties", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Praca_z_przyk\u0142adem/W\u0142asno\u015bci_obiektu/Dziedziczenie_w\u0142asno\u015bci" } ) }}

Source de la révision

<div class="noinclude"></div>
<h3 name="H.C3.A9ritage_de_propri.C3.A9t.C3.A9s"> Héritage de propriétés </h3>
<p>Supposons que l'objet <code>marc</code> ait été créé en tant que <code>Collaborateur</code> comme montré dans la Figure 8.3 à l'aide de l'instruction suivante :
</p>
<pre class="eval">marc = new Collaborateur;
</pre>
<p>Lorsque JavaScript voit l'opérateur <code>new</code>, un nouvel objet générique est créé et est passé comme paramètre en tant que valeur du mot-clé <code>this</code> à la fonction constructeur de <code>Collaborateur</code>. La fonction constructeur définit explicitement la valeur des propriétés de l'objet. Elle définit également la valeur de la propriété interne <code>__proto__</code> comme étant <code>Collaborateur.prototype</code>. (Ce nom de propriété commence et se termine par deux caractères de soulignement.) La propriété <code>__proto__</code> détermine la chaîne de prototypes utilisée pour renvoyer les valeurs de propriétés. Une fois que ces propriétés ont été définies, JavaScript renvoie le nouvel objet et l'instruction d'assignation fait pointer la variable <code>marc</code> vers cet objet.
</p><p>Ce procédé ne place pas explicitement de valeurs dans l'objet <code>marc</code> (des valeurs <i>locales</i>) car les propriétés de <code>marc</code> sont héritées depuis la chaîne de prototypes. Lorsque vous demandez la valeur d'une propriété, JavaScript vérifie d'abord si la valeur existe dans cet objet. Si c'est le cas, elle est renvoyée. Si la valeur n'est pas présente localement, JavaScript parcourt la chaîne de prototypes (à l'aide de la propriété <code>__proto__</code>). Si un objet dans la chaîne de prototypes a une valeur pour la propriété, celle-ci est renvoyée. Si aucune propriété n'est trouvée, JavaScript répond que l'objet n'a pas cette propriété. De cette manière, l'objet <code>marc</code> dispose des propriétés et valeurs suivantes :
</p>
<pre class="eval">marc.nom = "";
marc.département = "géneral";
marc.projets = [];
</pre>
<p>L'objet <code>marc</code> hérite de valeurs pour les propriétés <code>nom</code> et <code>département</code> de l'objet prototype indiqué par <code>marc.__proto__</code>. Il reçoit également une valeur locale pour la propriété <code>projets</code> via le constructeur <code>Collaborateur</code>. C'est ce qui permet l'héritage de propriétés et de valeurs en JavaScript. Certaines subtilités de ce processus sont détaillées dans <a href="fr/Guide_JavaScript_1.5/Retour_sur_l'h%c3%a9ritage_de_propri%c3%a9t%c3%a9s">Retour sur l'héritage de propriétés</a>.
</p><p>Étant donné que ces constructeurs ne permettent pas de fournir des valeurs spécifiques à une instance, cette information est générique. Les valeurs de propriétés sont celles qui sont partagées par défaut par tous les objets créés depuis <code>Collaborateur</code>. Il est évidemment possible de changer les valeurs de n'importe laquelle de ces propriétés. Ainsi, vous pourriez donner des informations spécifiques à <code>marc</code> de cette façon :
</p>
<pre class="eval">marc.nom = "Dupont, Marc";
marc.département = "admin";
marc.projets = ["navigateur"];
</pre>
<p><br>
</p>
<div class="noinclude">
<p>{{wiki.template('PrécédentSuivant', [ "Guide JavaScript 1.5:L\'exemple de l\'employé:Propriétés des objets", "Guide JavaScript 1.5:L\'exemple de l\'employé:Propriétés des objets:Ajout de propriétés" ])}}
</p>
</div>
<div class="noinclude">
</div>
{{ wiki.languages( { "en": "en/Core_JavaScript_1.5_Guide/The_Employee_Example/Object_Properties/Inheriting_Properties", "es": "es/Gu\u00eda_JavaScript_1.5/El_ejemplo_Employee/Propiedades_de_objetos/Heredando_las_propiedades", "ja": "ja/Core_JavaScript_1.5_Guide/The_Employee_Example/Object_Properties/Inheriting_Properties", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Praca_z_przyk\u0142adem/W\u0142asno\u015bci_obiektu/Dziedziczenie_w\u0142asno\u015bci" } ) }}
Revenir à cette révision