Skip to content

Commit d315a86

Browse files
committed
docs: finish translation
1 parent be00e6d commit d315a86

File tree

1 file changed

+61
-1
lines changed

1 file changed

+61
-1
lines changed

1-js/07-object-properties/02-property-accessors/article-fr.md

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,64 @@ user.name = ""; // Le nom est trop court...
181181

182182
Donc, le nom est stocké dans la propriété `_name`, et l'accés est fait par le getter et le setter.
183183

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+
function User(name, age) {
194+
this.name = name;
195+
this.age = age;
196+
}
197+
198+
let john = new User("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+
function User(name, birthday) {
207+
this.name = name;
208+
this.birthday = birthday;
209+
}
210+
211+
let john = new User("John", new Date(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+
function User(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 = new Date().getFullYear();
232+
return todayYear - this.birthday.getFullYear();
233+
}
234+
});
235+
*/!*
236+
}
237+
238+
let john = new User("John", new Date(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

Comments
 (0)