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/01-property-descriptors/article.md
+24-22Lines changed: 24 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,8 @@ Voyons d’abord comment obtenir ces "flags".
21
21
22
22
La methode [Object.getOwnPropertyDescriptor](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptor) permet d'interroger les informations *complètes* à propos d'une propriété.
23
23
24
-
La syntaxe est la suivante:
24
+
La syntaxe est la suivante :
25
+
25
26
```js
26
27
let descriptor =Object.getOwnPropertyDescriptor(obj, propertyName);
27
28
```
@@ -32,9 +33,9 @@ let descriptor = Object.getOwnPropertyDescriptor(obj, propertyName);
32
33
`propertyName`
33
34
: Le nom de la propriété.
34
35
35
-
La valeur renvoyée est un objet dit "descripteur de propriété": il contient la valeur et tous les descripteurs.
36
+
La valeur renvoyée est un objet dit "descripteur de propriété": il contient la valeur et tous les descripteurs.
Pour changer les attributs, on peut utiliser [Object.defineProperty](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/defineProperty).
Si la propriété existe, `defineProperty` met à jour ses attributs. Sinon, il crée la propriété avec la valeur et les descripteurs donnés. Dans ce cas, si aucun drapeau n'est fourni, il est supposé `false`.
72
73
73
-
Par exemple, ici, une propriété `name` est créée avec tous les attributs falsy:
74
+
Par exemple, ici, une propriété `name` est créée avec tous les attributs falsy:
Comparez-le avec `user.name` "normalement créé" ci-dessus: maintenant tous les attributs sont falsy. Si ce n'est pas ce que nous voulons, nous ferions mieux de leur attribuer la valeur `true` dans `descriptor`.
100
+
Comparez-le avec `user.name` "normalement créé" ci-dessus: maintenant tous les attributs sont falsy. Si ce n'est pas ce que nous voulons, nous ferions mieux de leur attribuer la valeur `true` dans `descriptor`.
100
101
101
102
Voyons maintenant les effets des attributs par exemple.
102
103
@@ -126,7 +127,7 @@ Maintenant, personne ne peut changer le nom de notre utilisateur, à moins qu’
126
127
En mode non strict, aucune erreur ne se produit lors de l'écriture dans des propriétés non inscriptibles et autres. Mais l'opération ne réussira toujours pas. Les actions violant l'indicateur sont simplement ignorées en silence dans les non-stricts.
127
128
```
128
129
129
-
Voici le même exemple, mais la propriété est créée à partir de zéro:
130
+
Voici le même exemple, mais la propriété est créée à partir de zéro:
130
131
131
132
```js run
132
133
let user = { };
@@ -148,7 +149,7 @@ user.name = "Pete"; // Error
148
149
149
150
Ajoutons maintenant un `toString` personnalisé à `user`.
150
151
151
-
Normalement, un `toString` intégré pour les objets n'est pas énumérable, il n'apparaît pas dans `for..in`. Mais si nous ajoutons notre propre `toString`, alors, par défaut, il apparaît dans `for..in`, comme ceci:
152
+
Normalement, un `toString` intégré pour les objets n'est pas énumérable, il n'apparaît pas dans `for..in`. Mais si nous ajoutons notre propre `toString`, alors, par défaut, il apparaît dans `for..in`, comme ceci:
152
153
153
154
```js run
154
155
let user = {
@@ -158,7 +159,7 @@ toString() {
158
159
}
159
160
};
160
161
161
-
// Par défaut, nos deux propriétés sont répertoriées:
162
+
// Par défaut, nos deux propriétés sont répertoriées:
162
163
for (let key in user) alert(key); // name, toString
163
164
```
164
165
@@ -179,12 +180,12 @@ enumerable: false
179
180
});
180
181
181
182
*!*
182
-
// Maintenant notre toString disparaît:
183
+
// Maintenant notre toString disparaît:
183
184
*/!*
184
185
for (let key in user) alert(key); // name
185
186
```
186
187
187
-
Les propriétés non énumérables sont également exclues de `Object.keys`:
188
+
Les propriétés non énumérables sont également exclues de `Object.keys`:
```smart header="The only attribute change possible: writable true -> false"
270
-
There's a minor exception about changing flags.
271
+
```smart header="Le seul changement d'attribut possible: writable true -> false"
272
+
Il existe une exception mineure concernant la modification des indicateurs.
271
273
272
-
We can change `writable: true` to `false` for a non-configurable property, thus preventing its value modification (to add another layer of protection). Not the other way around though.
274
+
Nous pouvons changer `writable: true` en `false` pour une propriété non configurable, empêchant ainsi la modification de sa valeur (pour ajouter une autre couche de protection).
273
275
```
274
276
275
277
## Object.defineProperties
276
278
277
279
Il y a une méthode [Object.defineProperties(obj, descriptors)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/defineProperties) qui permet de définir plusieurs propriétés à la fois.
278
280
279
-
La syntaxe est la suivante:
281
+
La syntaxe est la suivante:
280
282
281
283
```js
282
284
Object.defineProperties(obj, {
@@ -286,7 +288,7 @@ prop2: descriptor2
286
288
});
287
289
```
288
290
289
-
Par exemple:
291
+
Par exemple:
290
292
291
293
```js
292
294
Object.defineProperties(user, {
@@ -302,13 +304,13 @@ Nous pouvons donc définir plusieurs propriétés à la fois.
302
304
303
305
Pour obtenir tous les descripteurs de propriété à la fois, nous pouvons utiliser la méthode [Object.getOwnPropertyDescriptors(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptors).
304
306
305
-
Avec `Object.defineProperties`, elle peut être utilisé comme moyen de cloner un objet conscient des attributs:
307
+
Avec `Object.defineProperties`, elle peut être utilisé comme moyen de cloner un objet en tenant compte des attributs:
306
308
307
309
```js
308
310
let clone =Object.defineProperties({}, Object.getOwnPropertyDescriptors(obj));
309
311
```
310
312
311
-
Normalement, lorsque nous clonons un objet, nous utilisons une affectation pour copier les propriétés, comme ceci:
313
+
Normalement, lorsque nous clonons un objet, nous utilisons une affectation pour copier les propriétés, comme ceci:
312
314
313
315
```js
314
316
for (let key in user) {
@@ -324,7 +326,7 @@ Une autre différence est que `for..in` ignore les propriétés symboliques, mai
324
326
325
327
Les descripteurs de propriété fonctionnent au niveau des propriétés individuelles.
326
328
327
-
Il existe également des méthodes qui limitent l'accès à l'objet *entier*:
329
+
Il existe également des méthodes qui limitent l'accès à l'objet *entier*:
: Interdit l'ajout/la suppression/la modification de propriétés. Définit `configurable: false, writeable: false` pour toutes les propriétés existantes.
0 commit comments