You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/07-object-properties/02-property-accessors/article-fr.md
+61-1Lines changed: 61 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -181,4 +181,64 @@ user.name = ""; // Le nom est trop court...
181
181
182
182
Donc, le nom est stocké dans la propriété `_name`, et l'accés est fait par le getter et le setter.
183
183
184
-
Techniquement, le code extérieur est capable d'accéder directement à la propriété en utilisant `user._name`. Mais il y une convention très connue selon laquelle les propriétés commençant par un underscore `"_"` sont internes et ne devraient pas être touché depuis l'extérieur des objets.
184
+
Techniquement, le code extérieur est capable d'accéder directement à la propriété en utilisant `user._name`. Mais il y une convention très connue selon laquelle les propriétés commençant par un underscore `"_"` sont internes et ne devraient pas être touché depuis l'extérieur des objets.
185
+
186
+
## Utilisation pour la compatibilité
187
+
188
+
Un des avantages dans l'utilisation des accesseurs et qu'ils permettent de prendre le contrôle sur un propriété de données "normale" à tout moment en la remplaçant par un getter et un setter et modifiant son comportement.
189
+
190
+
Imaginons que nous commencions des objets utilisateur en utilisant des propriétés de données `name` et `age` :
191
+
192
+
```js
193
+
functionUser(name, age) {
194
+
this.name= name;
195
+
this.age= age;
196
+
}
197
+
198
+
let john =newUser("John", 25);
199
+
200
+
alert( john.age ); // 25
201
+
```
202
+
203
+
...Mais tôt ou tard, les choses pourraient changer. Au lieu d'`age` on pourrait decider de stocker `birthday`, parce que c'est plus précis et plus pratique :
204
+
205
+
```js
206
+
functionUser(name, birthday) {
207
+
this.name= name;
208
+
this.birthday= birthday;
209
+
}
210
+
211
+
let john =newUser("John", newDate(1992, 6, 1));
212
+
```
213
+
214
+
Maintenant que fait-on avec l'ancien code qui utilise toujours la propriété `age` ?
215
+
216
+
On peut esssayer de trouver tous les endroits où on utilisent `age` et les modifier, mais ça prend du temps and ça peut être compliqué à faire si le code est utilisé par plusieurs personnes. En plus, `age` est une bonne chose à avoir dans `user`, n'est ce pas ?
217
+
218
+
Gardons-le.
219
+
220
+
Ajoutons un getter pour `age` et résolvons le problème :
221
+
222
+
```js run no-beautify
223
+
functionUser(name, birthday) {
224
+
this.name= name;
225
+
this.birthday= birthday;
226
+
227
+
*!*
228
+
// Age est calculé à partir de la date actuelle et de birthday
229
+
Object.defineProperty(this, "age", {
230
+
get() {
231
+
let todayYear =newDate().getFullYear();
232
+
return todayYear -this.birthday.getFullYear();
233
+
}
234
+
});
235
+
*/!*
236
+
}
237
+
238
+
let john =newUser("John", newDate(1992, 6, 1));
239
+
240
+
alert( john.birthday ); // birthday est disponible
241
+
alert( john.age ); // ...Ainsi que l'age
242
+
```
243
+
244
+
Maintenant l'ancien code fonctionne aussi et nous avons une propriété additionnelle.
0 commit comments