@@ -95,4 +95,59 @@ alert(user.name); // Alice
9595alert (user .surname ); // Cooper
9696```
9797
98- Comme résultat, nous avons une propriété "virtuelle" ` fullName ` . Elle est lisible et ecrivable.
98+ Comme résultat, nous avons une propriété "virtuelle" ` fullName ` . Elle est lisible et ecrivable.
99+
100+ ## Descripteurs d'accesseur
101+
102+ Les descripteurs d'accesseur de propriété sont différents de ceux pour les propriété de données.
103+
104+ Pour les accesseurs de propriétés, il n'y a pas de ` value ` ou ` writable ` , à la place il y a les fonctions ` get ` et ` set ` .
105+
106+ Un descripteur d'accesseur peut avoir :
107+
108+ - ** ` get ` ** -- une fonction sans arguments, pour la lecture de propriété,
109+ - ** ` set ` ** -- une fonction avec un argument, qui est appelée lorsque la propriété change de valeur,
110+ - ** ` enumerable ` ** -- identique aux propriétés de données
111+ - ** ` configurable ` ** -- identique aux propriétés de données
112+
113+ Par exemple, pour créer un accesseur ` fullName ` avec ` defineProperty ` , on peut passer un descripteur avec ` get ` et ` set ` :
114+
115+ ``` js run
116+ let user = {
117+ name: " John" ,
118+ surname: " Smith"
119+ };
120+
121+ * ! *
122+ Object .defineProperty (user, ' fullName' , {
123+ get () {
124+ return ` ${ this .name } ${ this .surname } ` ;
125+ },
126+
127+ set (value ) {
128+ [this .name , this .surname ] = value .split (" " );
129+ }
130+ */ ! *
131+ });
132+
133+ alert (user .fullName ); // John Smith
134+
135+ for (let key in user) alert (key); // name, surname
136+ ```
137+
138+ Veuillez notez qu'une propriété peut être soit un accesseur (qui a les méthodes ` get/set ` ) ou une propriété de donnes (qui a ` value ` ), pas les deux.
139+
140+ Si nous essayons de fournir les deux ` get ` and ` value ` dans le même descripteur, il y aura une erreur :
141+
142+ ``` js run
143+ * ! *
144+ // Error: Invalid property descriptor.
145+ */ ! *
146+ Object .defineProperty ({}, ' prop' , {
147+ get () {
148+ return 1
149+ },
150+
151+ value: 2
152+ });
153+ ```
0 commit comments