Skip to content

Commit 8a8c30a

Browse files
committed
Conflicts fixed on "Object references and copying" page in french
language
1 parent 1762ab6 commit 8a8c30a

File tree

1 file changed

+31
-113
lines changed

1 file changed

+31
-113
lines changed

1-js/04-object-basics/02-object-copy/article.md

Lines changed: 31 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@ Et ici comment elle est stockée en mémoire :
3737

3838
L'objet est stocké quelque part dans la mémoire (du coté droit de l'image), tandis que la variable `user` (du coté gauche) a une référence à celui-ci.
3939

40-
<<<<<<< HEAD
4140
On peut imaginer la variable d'objet, ici `user`, comme une feuille de papier avec l'adresse de l'objet écrit dessus.
42-
=======
43-
We may think of an object variable, such as `user`, like a sheet of paper with the address of the object on it.
44-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
4541

4642
Lorque l'on réalise une action avec l'objet, par exemple récupérer la propriété `user.name`, le moteur de Javascript regarde à l'adresse et réalise l'opération sur l'objet actuel.
4743

@@ -104,13 +100,10 @@ alert( a == b ); // false
104100
105101
Pour des comparaisons comme `obj1 > obj2` ou des comparaisons avec une primitive `obj == 5`, les objets sont convertis en primitives. Nous étudierons comment les conversions d'objets fonctionnent très bientôt, mais pour dire la vérité, de telles comparaisons sont rarement nécessaires, en général elles sont le résultat d'une erreur de programmation.
106102
107-
<<<<<<< HEAD
108-
## Clonage et fusion, Object.assign [#clonage-et-fusion-object-assign]
109-
=======
110-
````smart header="Const objects can be modified"
111-
An important side effect of storing objects as references is that an object declared as `const` *can* be modified.
103+
````smart header="Les objets const peuvent être modifiés"
104+
Un effet secondaire important du stockage des objets en tant que références est qu'un objet déclaré comme `const` *peut* être modifié.
112105

113-
For instance:
106+
Par exemgle :
114107

115108
```js run
116109
const user = {
@@ -124,29 +117,20 @@ user.name = "Pete"; // (*)
124117
alert(user.name); // Pete
125118
```
126119

127-
It might seem that the line `(*)` would cause an error, but it does not. The value of `user` is constant, it must always reference the same object, but properties of that object are free to change.
120+
Il peut sembler que la ligne `(*)` causerait une erreur, mais ce n'est pas le cas. La valeur de `user` est constante, elle doit toujours référencer le même objet, mais les propriétés de cet objet sont libres de changer.
128121
129-
In other words, the `const user` gives an error only if we try to set `user=...` as a whole.
122+
En d'autres termes, `const user` donne une erreur uniquement si nous essayons de définir `user=...` dans son ensemble.
130123

131-
That said, if we really need to make constant object properties, it's also possible, but using totally different methods. We'll mention that in the chapter <info:property-descriptors>.
124+
Cela dit, si nous avons vraiment besoin de créer des propriétés d'objet constantes, c'est également possible, mais en utilisant des méthodes totalement différentes. Nous le mentionnerons dans le chapitre <info:property-descriptors>.
132125
````
133126

134-
## Cloning and merging, Object.assign [#cloning-and-merging-object-assign]
135-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
127+
## Clonage et fusion, Object.assign [#cloning-and-merging-object-assign]
136128

137129
Copier une variable object créé une référence en plus vers le même objet.
138130

139-
<<<<<<< HEAD
140-
Mais quid si nous voulons dupliquer un objet ? Créer une copie indépendante, un clone ?
131+
Mais que se passe-t-il si nous devons dupliquer un objet ?
141132

142-
C'est aussi faisable, mais un peu plus compliqué, parce qu'en Javascript il n'y pas de méthode intégrée pour cela. En fait c'est rarement utile. Copier par référence fonctionne la plupart du temps.
143-
144-
Mais si nous le voulons, alors nous devons créer un nouvel objet et répliquer sa structure en itérant ses propriétés et en les copiant au niveau primitive.
145-
=======
146-
But what if we need to duplicate an object?
147-
148-
We can create a new object and replicate the structure of the existing one, by iterating over its properties and copying them on the primitive level.
149-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
133+
Nous pouvons créer un nouvel objet et reproduire la structure de l'existant, en itérant sur ses propriétés et en les copiant au niveau primitif.
150134
151135
Comme cela :
152136
@@ -171,11 +155,7 @@ clone.name = "Pete"; // On change les données de celui-ci
171155
alert( user.name ); // c'est toujour john dans l'objet copié
172156
```
173157
174-
<<<<<<< HEAD
175-
On peut aussi utiliser la méthode [Object.assign](mdn:js/Object/assign) pour cela.
176-
=======
177-
We can also use the method [Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign).
178-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
158+
On peut aussi utiliser la méthode [Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) pour cela.
179159
180160
181161
La syntaxe est :
@@ -184,25 +164,14 @@ La syntaxe est :
184164
Object.assign(dest, ...sources)
185165
```
186166
187-
<<<<<<< HEAD
188167
- Le premier argument `dest` est l'objet cible
189-
- Les arguments suivants `src1, ..., srcN` (cela peut-être tant que l'on veut) sont les objets à copier.
190-
- La méthode copie les propriétés de tous les objets à copier `src1, ..., srcN` dans l'objet `dest`. En d'autres mots, les propriétés de tous les arguments à partir du deuxième sont copiés dans le premier argument.
191-
- L'appel retourne `dest`.
192-
193-
Par exemple, on peut l'utiliser pour fusionner plusieurs objets en un seul :
194-
195-
```js
196-
=======
197-
- The first argument `dest` is a target object.
198-
- Further arguments is a list of source objects.
168+
- Les autres arguments sont une liste d'objets source.
199169
200-
It copies the properties of all source objects into the target `dest`, and then returns it as the result.
170+
Il copie les propriétés de tous les objets sources dans la cible `dest`, puis les renvoie comme résultat.
201171
202-
For example, we have `user` object, let's add a couple of permissions to it:
172+
Par exemple, nous avons l'objet `user`, ajoutons-lui quelques autorisations :
203173

204174
```js run
205-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
206175
let user = { name: "John" };
207176
208177
let permissions1 = { canView: true };
@@ -213,14 +182,10 @@ let permissions2 = { canEdit: true };
213182
Object.assign(user, permissions1, permissions2);
214183
*/!*
215184
216-
<<<<<<< HEAD
217-
// on a user = { name: "John", canView: true, canEdit: true }
218-
=======
219185
// now user = { name: "John", canView: true, canEdit: true }
220186
alert(user.name); // John
221187
alert(user.canView); // true
222188
alert(user.canEdit); // true
223-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
224189
```
225190

226191
Si la propriété copiée existe déja, elle est écrasée.
@@ -233,11 +198,7 @@ Object.assign(user, { name: "Pete" });
233198
alert(user.name); // on a user = { name: "Pete" }
234199
```
235200

236-
<<<<<<< HEAD
237-
On peut aussi utiliser `Object.assign` pour remplacer la boucle `for..in` pour un clonage simple.
238-
=======
239-
We also can use `Object.assign` to perform a simple object cloning:
240-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
201+
Nous pouvons également utiliser `Object.assign` pour effectuer un simple clonage d'objet :
241202
242203
```js run
243204
let user = {
@@ -253,21 +214,13 @@ alert(clone.name); // John
253214
alert(clone.age); // 30
254215
```
255216
256-
<<<<<<< HEAD
257-
Cela copie toutes les propriétés de `user` dans l'objet vide et le retourne.
258-
=======
259-
Here it copies all properties of `user` into the empty object and returns it.
260-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
217+
Ici cela copie toutes les propriétés de `user` dans l'objet vide et le retourne.
261218

262219
Il existe également d'autres méthodes de clonage d'un objet, par ex. en utilisant la [syntaxe spread](info:rest-parameters-spread) `clone = {...user}`, abordé plus loin dans le tutoriel.
263220

264221
## Clonage imbriqué
265222

266-
<<<<<<< HEAD
267223
Jusqu'à maintenant on suppose que toutes les propriétés de `user` sont des primitives. Mais les propriétés peuvent être des références vers d'autres objets. Comment gèrer ces cas-là ?
268-
=======
269-
Until now we assumed that all properties of `user` are primitive. But properties can be references to other objects.
270-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
271224

272225
Comme ceci :
273226
```js run
@@ -282,13 +235,8 @@ let user = {
282235
alert( user.sizes.height ); // 182
283236
```
284237

285-
<<<<<<< HEAD
286238
Ce n'est plus suffisant de copier `clone.sizes = user.sizes`, car `user.sizes` est un objet, il sera copié par référence. Donc `clone` et `user` partageront le même objet `sizes` :
287239
288-
Comme cela :
289-
=======
290-
Now it's not enough to copy `clone.sizes = user.sizes`, because `user.sizes` is an object, and will be copied by reference, so `clone` and `user` will share the same sizes:
291-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
292240
293241
```js run
294242
let user = {
@@ -303,36 +251,19 @@ let clone = Object.assign({}, user);
303251
304252
alert( user.sizes === clone.sizes ); // true, c'est le même objet
305253

306-
<<<<<<< HEAD
307254
// user et clone partage l'objet sizes
308-
user.sizes.width++; // on modifie la propriété à un endroit
309-
alert(clone.sizes.width); // 51, on peut voir la modification dans un autre endroit
310-
```
311-
312-
Pour régler ça, on doit utiliser la boucle de clonage qui examine chaque valeur de `user[key]` et, si c'est un objet, répliquer sa structure aussi. On appelle cela un "clone réel" (deep clone).
313-
314-
On peut utiliser la récursion pour l'implémenter. Ou, pour ne pas réinventer la roue, prendre un implémentation existante. par exemple [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep) de la librairie [lodash](https://lodash.com).
315-
316-
```smart header="Les objets Const peuvent être modifiés"
317-
Un "effet secondaire" important du stockage d'objets en tant que références est qu'un objet déclaré comme `const` *peut* être modifié.
318-
```
319-
320-
Par exemple :
321-
=======
322-
// user and clone share sizes
323-
user.sizes.width = 60; // change a property from one place
324-
alert(clone.sizes.width); // 60, get the result from the other one
255+
user.sizes.width = 60; // changer une propriété d'un endroit
256+
alert(clone.sizes.width); // 60, obtenir le résultat de l'autre
325257
```
326258
327-
To fix that and make `user` and `clone` truly separate objects, we should use a cloning loop that examines each value of `user[key]` and, if it's an object, then replicate its structure as well. That is called a "deep cloning" or "structured cloning". There's [structuredClone](https://developer.mozilla.org/en-US/docs/Web/API/structuredClone) method that implements deep cloning.
259+
Pour résoudre ce problème et faire en sorte que `user` et `clone` soient des objets véritablement séparés, nous devrions utiliser une boucle de clonage qui examine chaque valeur de `user[key]` et, s'il s'agit d'un objet, répliquer également sa structure. C'est ce qu'on appelle un « clonage profond » ou « clonage structuré ». Il existe une méthode [structuredClone](https://developer.mozilla.org/en-US/docs/Web/API/structuredClone) qui implémente le clonage en profondeur.
328260
329261
330262
### structuredClone
331263
332-
The call `structuredClone(object)` clones the `object` with all nested properties.
264+
L'appel `structuredClone(object)` clone l'`object` avec toutes les propriétés imbriquées.
333265
334-
Here's how we can use it in our example:
335-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
266+
Voici comment nous pouvons l'utiliser dans notre exemple :
336267
337268
```js run
338269
let user = {
@@ -354,35 +285,27 @@ user.sizes.width = 60; // change a property from one place
354285
alert(clone.sizes.width); // 50, not related
355286
```
356287
357-
<<<<<<< HEAD
358-
Il peut sembler que la ligne `(*)` provoquerait une erreur, mais non. La valeur de `user` est constante, elle doit toujours référencer le même objet. Mais les propriétés de cet objet sont libres de changer.
288+
La méthode `structuredClone` peut cloner la plupart des types de données, tels que des objets, des tableaux, des valeurs primitives.
359289
360-
En d'autres termes, le `const user` ne donne une erreur que si nous essayons de définir `user = ...` dans son ensemble, et c'est tout.
290+
Il prend également en charge les références circulaires, lorsqu'une propriété d'objet fait référence à l'objet lui-même (directement ou via une chaîne ou des références).
361291
362-
Cela dit, si nous avons vraiment besoin de créer des propriétés d'objet constantes, c'est également possible, mais en utilisant des méthodes totalement différentes, nous le mentionnerons dans le chapitre <info:property-descriptors>.
363-
364-
=======
365-
The `structuredClone` method can clone most data types, such as objects, arrays, primitive values.
366-
367-
It also supports circular references, when an object property references the object itself (directly or via a chain or references).
368-
369-
For instance:
292+
Par exemple :
370293
371294
```js run
372295
let user = {};
373-
// let's create a circular reference:
374-
// user.me references the user itself
296+
// créons une référence circulaire :
297+
// user.me fait référence à l'utilisateur lui-même
375298
user.me = user;
376299

377300
let clone = structuredClone(user);
378301
alert(clone.me === clone); // true
379302
```
380303
381-
As you can see, `clone.me` references the `clone`, not the `user`! So the circular reference was cloned correctly as well.
304+
Comme vous pouvez le voir, `clone.me` fait référence au `clone`, pas à `user` ! Ainsi, la référence circulaire a également été clonée correctement.
382305
383-
Although, there are cases when `structuredClone` fails.
306+
Cependant, il existe des cas où `structuredClone` échoue.
384307
385-
For instance, when an object has a function property:
308+
Par exemple, lorsqu'un objet a une propriété de fonction :
386309
387310
```js run
388311
// error
@@ -391,19 +314,14 @@ structuredClone({
391314
});
392315
```
393316
394-
Function properties aren't supported.
317+
Les propriétés de fonction ne sont pas prises en charge.
395318
396-
To handle such complex cases we may need to use a combination of cloning methods, write custom code or, to not reinvent the wheel, take an existing implementation, for instance [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep) from the JavaScript library [lodash](https://lodash.com).
397-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
319+
Pour gérer des cas aussi complexes, nous devrons peut-être utiliser une combinaison de méthodes de clonage, écrire du code personnalisé ou, pour ne pas réinventer la roue, prendre une implémentation existante, par exemple [_.cloneDeep(obj)](https://lodash.com /docs#cloneDeep) de la bibliothèque JavaScript [lodash](https://lodash.com).
398320
399321
## Résumé
400322
401323
Les objets sont assignés et copiés par référence. En d'autres termes, une variable ne stocke pas la "valeur de l'objet" mais la "référence" (l'adresse en mémoire) de la valeur. Donc copier cette variable, ou la passer en argument d'une fonction, copie la référence, pas l'objet lui-même.
402324
403325
Toutes les opérations faites par une copie de la référence (comme ajouter/supprimer une propriété) sont faites sur le même objet.
404326
405-
<<<<<<< HEAD
406-
Pour réaliser une copie (un clone) on peut utiliser `Object.assign`, pour faire une "copie superficielle" (les objets imbriqués sont copiés par référence), ou pour une "copie réelle" une fonction comme [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
407-
=======
408-
To make a "real copy" (a clone) we can use `Object.assign` for the so-called "shallow copy" (nested objects are copied by reference) or a "deep cloning" function `structuredClone` or use a custom cloning implementation, such as [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
409-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
327+
Pour faire une "copie réelle" (un clone), nous pouvons utiliser `Object.assign` pour la soi-disant "copie superficielle" (les objets imbriqués sont copiés par référence) ou une fonction de "clonage en profondeur" `structuredClone` ou utiliser une implementation personnalisée de clonage, telle que [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).

0 commit comments

Comments
 (0)