Skip to content

Commit 3108a2d

Browse files
authored
Merge pull request #66 from TevaHenry/master
Prototypal inheritance
2 parents 77c0236 + 30f373d commit 3108a2d

File tree

9 files changed

+122
-122
lines changed

9 files changed

+122
-122
lines changed
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

2-
1. `true`, taken from `rabbit`.
3-
2. `null`, taken from `animal`.
4-
3. `undefined`, there's no such property any more.
2+
1. `true`, tiré de `rabbit`.
3+
2. `null`, tiré de `animal`.
4+
3. `undefined`, il n'y a plus une telle propriété.

1-js/08-prototypes/01-prototype-inheritance/1-property-after-delete/task.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Working with prototype
5+
# Travailler avec prototype
66

7-
Here's the code that creates a pair of objects, then modifies them.
7+
Voici le code qui crée une paire d'objets, puis les modifie.
88

9-
Which values are shown in the process?
9+
Quelles sont les valeurs affichées dans le processus?
1010

1111
```js
1212
let animal = {
@@ -28,4 +28,4 @@ delete animal.jumps;
2828
alert( rabbit.jumps ); // ? (3)
2929
```
3030

31-
There should be 3 answers.
31+
Il devrait y avoir 3 réponses.

1-js/08-prototypes/01-prototype-inheritance/2-search-algorithm/solution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
1. Let's add `__proto__`:
2+
1. Ajoutons `__proto__`:
33

44
```js run
55
let head = {
@@ -27,6 +27,6 @@
2727
alert( table.money ); // undefined
2828
```
2929

30-
2. In modern engines, performance-wise, there's no difference whether we take a property from an object or its prototype. They remember where the property was found and reuse it in the next request.
30+
2. Dans les moteurs modernes, en termes de performances, il n’ya pas de différence selon que l’on prend une propriété d’un objet ou de son prototype. Ils se souviennent du lieu où la propriété a été trouvée et le réutilisent à la demande suivante.
3131

32-
For instance, for `pockets.glasses` they remember where they found `glasses` (in `head`), and next time will search right there. They are also smart enough to update internal caches if something changes, so that optimization is safe.
32+
Par exemple, pour `pockets.glasses` ils se souviennent où ils ont trouvé `glasses` (dans `head`), et la prochaine fois rechercheront là. Ils sont également assez intelligents pour mettre à jour les caches internes en cas de changement, de sorte que l'optimisation est sécurisée.

1-js/08-prototypes/01-prototype-inheritance/2-search-algorithm/task.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Searching algorithm
5+
# Algorithme de recherche
66

7-
The task has two parts.
7+
La tâche comporte deux parties.
88

9-
We have objects:
9+
Nous avons des objets:
1010

1111
```js
1212
let head = {
@@ -27,5 +27,5 @@ let pockets = {
2727
};
2828
```
2929

30-
1. Use `__proto__` to assign prototypes in a way that any property lookup will follow the path: `pockets` -> `bed` -> `table` -> `head`. For instance, `pockets.pen` should be `3` (found in `table`), and `bed.glasses` should be `1` (found in `head`).
31-
2. Answer the question: is it faster to get `glasses` as `pockets.glasses` or `head.glasses`? Benchmark if needed.
30+
1. Utilisez `__proto__` pour attribuer des prototypes de manière à ce que toute recherche de propriété suive le chemin:`pockets` -> `bed` -> `table` -> `head`. Par exemple, `pocket.pen` devrait être `3` (trouvé dans `table`), et `bed.glasses` devrait être `1` (trouvé dans `head`).
31+
2. Répondez à la question: est-il plus rapide d’obtenir `glasses` en tant que `pockets.glasses` ou `head.glasses`? Analyse si nécessaire.
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
**The answer: `rabbit`.**
1+
**La réponse: `rabbit`.**
22

3-
That's because `this` is an object before the dot, so `rabbit.eat()` modifies `rabbit`.
3+
C'est parce que `this` est un objet avant le point, donc `rabbit.eat()` modifie `rabbit`.
44

5-
Property lookup and execution are two different things.
5+
La recherche et l'exécution de propriétés sont deux choses différentes.
66

7-
The method `rabbit.eat` is first found in the prototype, then executed with `this=rabbit`.
7+
La méthode `rabbit.eat` est d'abord trouvée dans le prototype, puis exécutée avec `this=rabbit`.

1-js/08-prototypes/01-prototype-inheritance/3-proto-and-this/task.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Where it writes?
5+
# Où est-ce écrit?
66

7-
We have `rabbit` inheriting from `animal`.
7+
Nous avons `rabbit` héritant de `animal`.
88

9-
If we call `rabbit.eat()`, which object receives the `full` property: `animal` or `rabbit`?
9+
Si nous appelons `rabbit.eat()`, quel objet reçoit la propriété `full`: `animal` ou `rabbit`?
1010

1111
```js
1212
let animal = {

1-js/08-prototypes/01-prototype-inheritance/4-hamster-proto/solution.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
Let's look carefully at what's going on in the call `speedy.eat("apple")`.
1+
Examinons attentivement ce qui se passe dans l'appel `speedy.eat("apple")`.
22

3-
1. The method `speedy.eat` is found in the prototype (`=hamster`), then executed with `this=speedy` (the object before the dot).
3+
1. La méthode `speedy.eat` se trouve dans le prototype (`=hamster`), puis exécutée avec `this=speedy` (l'objet avant le point).
44

5-
2. Then `this.stomach.push()` needs to find `stomach` property and call `push` on it. It looks for `stomach` in `this` (`=speedy`), but nothing found.
5+
2. Ensuite, `this.stomach.push()` doit trouver la propriété `stomach` et appeler `push` dessus. Il cherche `stomach` dans `this` (`=speedy`), mais rien n'est trouvé.
66

7-
3. Then it follows the prototype chain and finds `stomach` in `hamster`.
7+
3. Ensuite, il suit la chaîne de prototypes et trouve `stomach` dans `hamster`.
88

9-
4. Then it calls `push` on it, adding the food into *the stomach of the prototype*.
9+
4. Ensuite, il appelle `push` dessus, en ajoutant la nourriture dans *stomach du prototype*.
1010

11-
So all hamsters share a single stomach!
11+
Tous les hamsters partagent donc un seul estomac!
1212

13-
Both for `lazy.stomach.push(...)` and `speedy.stomach.push()`, the property `stomach` is found in the prototype (as it's not in the object itself), then the new data is pushed into it.
13+
Tant pour `lazy.stomach.push(...)` et `speedy.stomach.push()`, la propriété `stomach` se trouve dans le prototype (comme il est pas dans l'objet lui-même), alors les nouvelles données sont poussé dedans.
1414

15-
Please note that such thing doesn't happen in case of a simple assignment `this.stomach=`:
15+
Veuillez noter qu'une telle chose ne se produit pas dans le cas d'une simple affectation `this.stomach=`:
1616

1717
```js run
1818
let hamster = {
1919
stomach: [],
2020

2121
eat(food) {
2222
*!*
23-
// assign to this.stomach instead of this.stomach.push
23+
// assigner à this.stomach au lieu de this.stomach.push
2424
this.stomach = [food];
2525
*/!*
2626
}
@@ -34,17 +34,17 @@ let lazy = {
3434
__proto__: hamster
3535
};
3636

37-
// Speedy one found the food
37+
// Speedy a trouvé la nourriture
3838
speedy.eat("apple");
3939
alert( speedy.stomach ); // apple
4040

41-
// Lazy one's stomach is empty
42-
alert( lazy.stomach ); // <nothing>
41+
// L'estomac de Lazy est vide
42+
alert( lazy.stomach ); // <rien>
4343
```
4444

45-
Now all works fine, because `this.stomach=` does not perform a lookup of `stomach`. The value is written directly into `this` object.
45+
Maintenant, tout fonctionne bien, car `this.stomach=` n'effectue pas de recherche de `stomach`. La valeur est écrite directement dans l'objet `this`.
4646

47-
Also we can totally evade the problem by making sure that each hamster has their own stomach:
47+
Nous pouvons également éviter le problème en nous assurant que chaque hamster a son propre `stomach`:
4848

4949
```js run
5050
let hamster = {
@@ -69,12 +69,12 @@ let lazy = {
6969
*/!*
7070
};
7171

72-
// Speedy one found the food
72+
// Speedy a trouvé la nourriture
7373
speedy.eat("apple");
7474
alert( speedy.stomach ); // apple
7575

76-
// Lazy one's stomach is empty
77-
alert( lazy.stomach ); // <nothing>
76+
// L'estomac de Lazy est vide
77+
alert( lazy.stomach ); // <rien>
7878
```
7979

80-
As a common solution, all properties that describe the state of a particular object, like `stomach` above, should be written into that object. That prevents such problems.
80+
En tant que solution commune, toutes les propriétés qui décrivent l'état d'un objet particulier, comme `stomach` ci-dessus, devraient être écrits dans cet objet. Cela empêche de tels problèmes.

1-js/08-prototypes/01-prototype-inheritance/4-hamster-proto/task.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Why two hamsters are full?
5+
# Pourquoi deux hamsters sont pleins?
66

7-
We have two hamsters: `speedy` and `lazy` inheriting from the general `hamster` object.
7+
Nous avons deux hamsters: `speedy` et `lazy` héritant de l'objet général `hamster`.
88

9-
When we feed one of them, the other one is also full. Why? How to fix it?
9+
Lorsque nous nourrissons l'un d'eux, l'autre est également plein. Pourquoi? Comment y remédier?
1010

1111
```js run
1212
let hamster = {
@@ -25,11 +25,11 @@ let lazy = {
2525
__proto__: hamster
2626
};
2727

28-
// This one found the food
28+
// Celui-ci a trouvé la nourriture
2929
speedy.eat("apple");
3030
alert( speedy.stomach ); // apple
3131

32-
// This one also has it, why? fix please.
32+
// Celui-ci l'a aussi, pourquoi? réparer s'il vous plaît.
3333
alert( lazy.stomach ); // apple
3434
```
3535

0 commit comments

Comments
 (0)