Skip to content

Commit 9198767

Browse files
authored
Merge pull request #464 from ArmandDelessert/patch-1-js-08-prototypes
Apporte plusieurs corrections au chapitre 1.8 (Prototypes)
2 parents 02df404 + a4c15f6 commit 9198767

File tree

16 files changed

+89
-99
lines changed

16 files changed

+89
-99
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ importance: 5
66

77
Voici le code qui crée une paire d'objets, puis les modifie.
88

9-
Quelles sont les valeurs affichées dans le processus?
9+
Quelles sont les valeurs affichées dans le processus ?
1010

1111
```js
1212
let animal = {

1-js/08-prototypes/01-prototype-inheritance/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,12 +319,12 @@ Remarque, il y a une chose amusante. D'où vient la méthode `rabbit.hasOwnPrope
319319

320320
...Mais pourquoi `hasOwnProperty` n'apparaît pas dans la boucle `for..in`, comme `eats` et `jumps`, s'il répertorie toutes les propriétés héritées.
321321

322-
La réponse est simple : ce n'est pas énumérable. Comme toutes les autres propriétés de `Object.prototype`, il possède l'attribut `enumerable: false`. C'est pourquoi ils ne sont pas répertoriés. Et `for..in` ne répertorie que les propriétés énumérables. C'est pourquoi elle et le reste des propriétés `Object.prototype` ne sont pas listés.
322+
La réponse est simple : ce n'est pas énumérable. Comme toutes les autres propriétés de `Object.prototype`, il possède l'attribut `enumerable: false`. C'est pourquoi ils ne sont pas répertoriés. Et `for..in` ne répertorie que les propriétés énumérables. C'est pourquoi elle et le reste des propriétés de `Object.prototype` ne sont pas listés.
323323

324324
```smart header="Presque toutes les autres méthodes d'obtention de clé/valeur ignorent les propriétés héritées"
325325
Presque toutes les autres méthodes d'obtention de clé/valeur, telles que `Object.keys`, `Object.values` et ainsi de suite ignorent les propriétés héritées.
326326
327-
Ils ne fonctionnent que sur l'objet lui-même. Les propriétés du prototype ne sont *pas* prises en compte.
327+
Elles ne fonctionnent que sur l'objet lui-même. Les propriétés du prototype ne sont *pas* prises en compte.
328328
```
329329

330330
## Résumé

1-js/08-prototypes/02-function-prototype/1-changing-prototype/solution.md

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

2-
Réponses:
2+
Réponses :
33

44
1. `true`.
55

@@ -13,7 +13,7 @@ Réponses:
1313

1414
3. `true`.
1515

16-
     Toutes les opérations `delete` sont appliquées directement à l'objet. `Delete rabbit.eats` tente ici de supprimer la propriété `eats` de `rabbit`, mais ne l’a pas. Donc l'opération n'aura aucun effet.
16+
     Toutes les opérations `delete` sont appliquées directement à l'objet. `delete rabbit.eats` tente ici de supprimer la propriété `eats` de `rabbit`, mais ne l’a pas. Donc l'opération n'aura aucun effet.
1717

1818
4. `undefined`.
1919

1-js/08-prototypes/02-function-prototype/1-changing-prototype/task.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ importance: 5
66

77
Dans le code ci-dessous, nous créons `new Rabbit`, puis essayons de modifier son prototype.
88

9-
Au début, nous avons ce code:
9+
Au début, nous avons ce code :
1010

1111
```js run
1212
function Rabbit() {}
@@ -19,8 +19,7 @@ let rabbit = new Rabbit();
1919
alert( rabbit.eats ); // true
2020
```
2121

22-
23-
1. Nous avons ajouté une chaîne de caractères supplémentaire (surlignée), qu'affiche `alert` maintenant?
22+
1. Nous avons ajouté une chaîne de caractères supplémentaire (surlignée), qu'affiche `alert` maintenant ?
2423

2524
```js
2625
function Rabbit() {}
@@ -37,7 +36,7 @@ alert( rabbit.eats ); // true
3736
alert( rabbit.eats ); // ?
3837
```
3938

40-
2. ...Et si le code est comme ça (une ligne remplacé)?
39+
2. ...Et si le code est comme ça (une ligne remplacée) ?
4140

4241
```js
4342
function Rabbit() {}
@@ -54,7 +53,7 @@ alert( rabbit.eats ); // true
5453
alert( rabbit.eats ); // ?
5554
```
5655

57-
3. Et comme ceci (une ligne remplacée)?
56+
3. Et comme ceci (une ligne remplacée) ?
5857

5958
```js
6059
function Rabbit() {}
@@ -71,7 +70,7 @@ alert( rabbit.eats ); // true
7170
alert( rabbit.eats ); // ?
7271
```
7372

74-
4. La dernière variante:
73+
4. La dernière variante :
7574

7675
```js
7776
function Rabbit() {}

1-js/08-prototypes/02-function-prototype/4-new-object-same-constructor/solution.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Nous pouvons utiliser cette approche si nous sommes sûrs que la propriété `"constructeur"` a la valeur correcte.
22

3-
Par exemple, si nous ne touchons pas le `"prototype"` par défaut, alors ce code fonctionne à coup sûr:
3+
Par exemple, si nous ne touchons pas le `"prototype"` par défaut, alors ce code fonctionne à coup sûr :
44

55
```js run
66
function User(name) {
@@ -10,14 +10,14 @@ function User(name) {
1010
let user = new User('John');
1111
let user2 = new user.constructor('Pete');
1212

13-
alert( user2.name ); // Pete (ça marche!)
13+
alert( user2.name ); // Pete (ça marche !)
1414
```
1515

1616
Cela a fonctionné, car `User.prototype.constructor == User`.
1717

1818
..Mais si quelqu'un, pour ainsi dire, écrase `User.prototype` et oublie de recréer `constructor` pour faire référence à `User`, il échouera.
1919

20-
Par exemple:
20+
Par exemple :
2121

2222
```js run
2323
function User(name) {
@@ -33,9 +33,9 @@ let user2 = new user.constructor('Pete');
3333
alert( user2.name ); // undefined
3434
```
3535

36-
Pourquoi `user2.name` est `undefined`?
36+
Pourquoi `user2.name` est `undefined` ?
3737

38-
Voici comment `new user.constructor('Pete')` fonctionne:
38+
Voici comment `new user.constructor('Pete')` fonctionne :
3939

4040
1. Tout d'abord, il cherche `constructor` dans `user`. Rien.
4141
2. Ensuite, il suit la chaîne de prototypes. Le prototype de `user` est `User.prototype`, et il n'a pas non plus de `constructor` (parce que nous avons "oublié" de le régler correctement !).

1-js/08-prototypes/02-function-prototype/4-new-object-same-constructor/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ importance: 5
66

77
Imaginez nous avons un objet arbitraire `obj`, créé par une fonction constructeur - nous ne savons pas lequel, mais nous aimerions créer un nouvel objet à l'aide de celui-ci.
88

9-
Pouvons-nous le faire comme ça?
9+
Pouvons-nous le faire comme ça ?
1010

1111
```js
1212
let obj2 = new obj.constructor();
1313
```
1414

15-
Donne un exemple de fonction constructeur pour `obj` qui laisse ce code fonctionner correctement. Et un exemple qui fait que ça marche mal.
15+
Donne un exemple de fonction constructeur pour `obj` qui laisse ce code fonctionner correctement. Et un exemple qui fait que ça marche mal.

1-js/08-prototypes/02-function-prototype/article.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ Rappelez-vous que de nouveaux objets peuvent être créés avec une fonction con
55
Si `F.prototype` est un objet, alors l'opérateur `new` l'utilise pour définir `[[Prototype]]` pour le nouvel objet.
66

77
```smart header="Veuillez noter"
8-
JavaScript avait l'héritage prototypique depuis le début. C'était l'une des caractéristiques principales de la langue.
8+
JavaScript avait l'héritage prototypique depuis le début. C'était l'une des caractéristiques principales du langage.
99
1010
Mais dans le passé, il n'y avait pas d'accès direct. La seule chose qui fonctionnait de manière fiable est une propriété `"prototype"` de la fonction constructeur décrite dans ce chapitre. Donc, il y a beaucoup de scripts qui l'utilisent encore.
1111
```
1212

1313
Veuillez noter que `F.prototype` signifie ici une propriété régulière nommée `"prototype"` sur `F`. Cela ressemble quelque peu au terme "prototype", mais nous entendons ici une propriété régulière portant ce nom.
1414

15-
Voici l'exemple:
15+
Voici l'exemple :
1616

1717
```js run
1818
let animal = {
@@ -32,27 +32,27 @@ let rabbit = new Rabbit("White Rabbit"); // rabbit.__proto__ == animal
3232
alert( rabbit.eats ); // true
3333
```
3434

35-
Définir `Rabbit.prototype=animal` énonce littéralement ce qui suit: "Lorsqu'un `new Rabbit` est créé, assigner son `[[Prototype]]` à `animal`".
35+
Définir `Rabbit.prototype=animal` énonce littéralement ce qui suit : "Lorsqu'un `new Rabbit` est créé, assigner son `[[Prototype]]` à `animal`".
3636

37-
C'est l'image résultante:
37+
Voici l'image résultante :
3838

3939
![](proto-constructor-animal-rabbit.svg)
4040

4141
Sur l'image, `"prototype"` est une flèche horizontale, ce qui signifie une propriété normale, et `[[Prototype]]` est vertical, ce qui signifie l'héritage de `rabbit` de `animal`.
4242

4343
```smart header="`F.prototype` utilisé uniquement pendant `new F`"
44-
La propriété `F.prototype` est utilisée uniquement lorsque `new F` est appelé, elle attribue `[[Prototype]]` du nouvel objet. Après cela, il n'y a plus de connexion entre `F.prototype` et le nouvel objet.
44+
La propriété `F.prototype` est utilisée uniquement lorsque `new F` est appelé, elle attribue `[[Prototype]]` du nouvel objet. Après cela, il n'y a plus de connexion entre `F.prototype` et le nouvel objet.
4545

4646
Si, après la création, la propriété `F.prototype` change (`F.prototype = <un autre objet>`), les nouveaux objets créés par `new F` auront un autre objet comme `[[Prototype]]`, mais les objets déjà existants conservent l'ancien.
4747
```
4848
4949
## F.prototype par défaut, propriété du constructeur
5050
51-
Chaque fonction a la propriété `"prototype "` même si nous ne la fournissons pas.
51+
Chaque fonction a la propriété `"prototype"` même si nous ne la fournissons pas.
5252
5353
Le `"prototype"` par défaut est un objet avec comme seule propriété `constructor` qui renvoie à la fonction elle-même.
5454
55-
Comme ça:
55+
Comme ça :
5656
5757
```js
5858
function Rabbit() {}
@@ -64,7 +64,7 @@ Rabbit.prototype = { constructor: Rabbit };
6464

6565
![](function-prototype-constructor.svg)
6666

67-
Nous pouvons le vérifier:
67+
Nous pouvons le vérifier :
6868

6969
```js run
7070
function Rabbit() {}
@@ -74,7 +74,7 @@ function Rabbit() {}
7474
alert( Rabbit.prototype.constructor == Rabbit ); // true
7575
```
7676

77-
Naturellement, si nous ne faisons rien, la propriété `constructor` est disponible pour tous les "rabbits" via `[[Prototype]]`:
77+
Naturellement, si nous ne faisons rien, la propriété `constructor` est disponible pour tous les "rabbits" via `[[Prototype]]` :
7878

7979
```js run
8080
function Rabbit() {}
@@ -90,7 +90,7 @@ alert(rabbit.constructor == Rabbit); // true (de prototype)
9090

9191
Nous pouvons utiliser la propriété `constructor` pour créer un nouvel objet en utilisant le même constructeur que l'existant.
9292

93-
Comme ici:
93+
Comme ici :
9494

9595
```js run
9696
function Rabbit(name) {
@@ -111,11 +111,11 @@ Mais probablement la chose la plus importante à propos de `"constructor"` est q
111111

112112
**...JavaScript lui-même n'assure pas la bonne valeur de `"constructor"`.**
113113

114-
Oui, il existe dans le `"prototype"` par défaut pour les fonctions, mais c'est tout. Ce qui se passe avec apres le fait - dépend totalement de nous.
114+
Oui, il existe dans le `"prototype"` par défaut des fonctions, mais c'est tout. Ce qu'il en adviendra par la suite dépend entièrement de nous.
115115

116116
En particulier, si nous remplaçons le prototype par défaut dans son ensemble, il ne contiendra pas de "constructor".
117117

118-
Par exemple:
118+
Par exemple :
119119

120120
```js run
121121
function Rabbit() {}
@@ -129,7 +129,7 @@ alert(rabbit.constructor === Rabbit); // false
129129
*/!*
130130
```
131131

132-
Donc, pour garder le bon `"constructor"`, nous pouvons choisir d'ajouter/supprimer des propriétés au `"prototype"` par défaut au lieu de l'écraser dans son ensemble:
132+
Donc, pour garder le bon `"constructor"`, nous pouvons choisir d'ajouter/supprimer des propriétés au `"prototype"` par défaut au lieu de l'écraser dans son ensemble :
133133

134134
```js
135135
function Rabbit() {}
@@ -140,7 +140,7 @@ Rabbit.prototype.jumps = true
140140
// le Rabbit.prototype.constructor par défaut est conservé
141141
```
142142

143-
Ou bien, recréez manuellement la propriété `constructor`:
143+
Ou bien, recréez manuellement la propriété `constructor` :
144144

145145
```js
146146
Rabbit.prototype = {
@@ -153,18 +153,18 @@ Rabbit.prototype = {
153153
// maintenant le constructeur est également correct, car nous l'avons ajouté
154154
```
155155

156-
157156
## Résumé
158157

159158
Dans ce chapitre, nous avons brièvement décrit la manière de définir un `[[Prototype]]` pour les objets créés via une fonction constructeur. Plus tard, nous verrons des modèles de programmation plus avancés qui en dépendent.
160159

161160
Tout est assez simple, juste quelques précisions pour clarifier les choses :
162161

163-
- La propriété `F.prototype` (ne pas confondre avec `[[Prototype]]`) définit `[[Prototype]]` de nouveaux objets lorsque `new F()` est appelée.
162+
- La propriété `F.prototype` (ne pas confondre avec `[[Prototype]]`) définit `[[Prototype]]` sur les nouveaux objets lorsque `new F()` est appelée.
164163
- La valeur de `F.prototype` devrait soit être un objet ou `null` : les autres valeurs ne fonctionneront pas.
165164
- La propriété `"prototype"` n'a cet effet spécial que lorsqu'elle est définie dans une fonction constructeur et invoquée avec `new`.
166165

167-
Sur les objets ordinaires, le `prototype` n'a rien de spécial:
166+
Sur les objets ordinaires, le `prototype` n'a rien de spécial :
167+
168168
```js
169169
let user = {
170170
name: "John",

1-js/08-prototypes/03-native-prototypes/1-defer-to-prototype/solution.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
```js run
42
Function.prototype.defer = function(ms) {
53
setTimeout(this, ms);

1-js/08-prototypes/03-native-prototypes/1-defer-to-prototype/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ importance: 5
66

77
Ajoutez au prototype de toutes les fonctions la méthode `defer(ms)`, qui exécute la fonction après `ms` millisecondes.
88

9-
Une fois que vous le faites, ce code devrait fonctionner:
9+
Une fois que vous le faites, ce code devrait fonctionner :
1010

1111
```js
1212
function f() {

1-js/08-prototypes/03-native-prototypes/2-defer-to-prototype-extended/solution.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
```js run
42
Function.prototype.defer = function(ms) {
53
let f = this;
@@ -8,17 +6,17 @@ Function.prototype.defer = function(ms) {
86
}
97
};
108

11-
// vérifier
9+
// vérification
1210
function f(a, b) {
1311
alert( a + b );
1412
}
1513

1614
f.defer(1000)(1, 2); // montre 3 après 1 seconde
1715
```
1816

19-
Please note: we use `this` in `f.apply` to make our decoration work for object methods.
17+
Notez que nous utilisons `this` dans `f.apply` pour que notre décoration fonctionne pour les méthodes d'objets.
2018

21-
So if the wrapper function is called as an object method, then `this` is passed to the original method `f`.
19+
Ainsi, si la fonction wrapper est appelée en tant que méthode d'objet, alors `this` est passé à la méthode originale `f`.
2220

2321
```js run
2422
Function.prototype.defer = function(ms) {

1-js/08-prototypes/03-native-prototypes/2-defer-to-prototype-extended/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ importance: 4
66

77
Ajoutez au prototype de toutes les fonctions la méthode `defer(ms)`, qui renvoie un wrapper, retardant l’appel de `ms` millisecondes.
88

9-
Voici un exemple de la façon dont cela devrait fonctionner:
9+
Voici un exemple de la façon dont cela devrait fonctionner :
1010

1111
```js
1212
function f(a, b) {

0 commit comments

Comments
 (0)