Skip to content

Commit 783fa6d

Browse files
Apply minor fixes in '1-js/08-prototypes/01-prototype-inheritance/article.md'
1 parent 1c22457 commit 783fa6d

File tree

1 file changed

+10
-11
lines changed
  • 1-js/08-prototypes/01-prototype-inheritance

1 file changed

+10
-11
lines changed

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ let rabbit = {
4747
rabbit.__proto__ = animal; // (*)
4848
*/!*
4949

50-
// nous pouvons maintenant trouver les deux propriétés dans rabbit:
50+
// nous pouvons maintenant trouver les deux propriétés dans rabbit :
5151
*!*
5252
alert( rabbit.eats ); // true (**)
5353
*/!*
5454
alert( rabbit.jumps ); // true
5555
```
5656

57-
Ici, la ligne `(*)` définit `animal` pour être un prototype de` lapin`.
57+
Ici, la ligne `(*)` définit `animal` pour être un prototype de `lapin`.
5858

5959
Ensuite, lorsque `alert` essaie de lire la propriété `rabbit.eats` `(**)`, ce n'est pas dans `rabbit`, donc JavaScript suit la référence `[[Prototype]]` et la trouve dans `animal` (regarde de bas en haut) :
6060

@@ -129,8 +129,7 @@ Il n'y a que deux limitations :
129129
1. Les références ne peuvent pas tourner en rond. JavaScript va générer une erreur si nous essayons d'assigner `__proto__` dans un cercle.
130130
2. La valeur de `__proto__` peut être un objet ou `null`. Les autres types sont ignorés.
131131

132-
Cela peut aussi être évident, mais quand même: il ne peut y avoir qu'un seul `[[Prototype]]`. Un objet ne peut pas hériter de deux autres.
133-
132+
Cela peut aussi être évident, mais quand même : il ne peut y avoir qu'un seul `[[Prototype]]`. Un objet ne peut pas hériter de deux autres.
134133

135134
```smart header="`__proto__` est un getter/setter historique pour [[Prototype]]`"
136135
C'est une erreur courante des développeurs novices de ne pas connaître la différence entre les deux.
@@ -156,7 +155,7 @@ Dans l'exemple ci-dessous, nous affectons sa propre méthode `walk` à `rabbit`
156155
let animal = {
157156
eats: true,
158157
walk() {
159-
/* cette méthode ne sera pas utilisée par rabbit */
158+
/* cette méthode ne sera pas utilisée par rabbit */
160159
}
161160
};
162161
@@ -215,9 +214,9 @@ Ici dans la ligne `(*)` la propriété `admin.fullName` a un accesseur dans le p
215214

216215
Une question intéressante peut se poser dans l'exemple ci-dessus : quelle est la valeur de `this` dans `set fullName(value)` ? Où sont écrites les propriétés `this.name` et `this.surname` : dans `user` ou `admin` ?
217216

218-
La réponse est simple: `this` n'est pas du tout affecté par les prototypes.
217+
La réponse est simple : `this` n'est pas du tout affecté par les prototypes.
219218

220-
**Peu importe où la méthode est trouvée: dans un objet ou son prototype. Dans un appel de méthode, `this` est toujours l'objet avant le point.**
219+
**Peu importe où la méthode est trouvée : dans un objet ou son prototype. Dans un appel de méthode, `this` est toujours l'objet avant le point.**
221220

222221
Ainsi, l'appel du groupe `admin.fullName=` utilise `admin` comme `this`, pas `user`.
223222

@@ -287,7 +286,7 @@ for(let prop in rabbit) alert(prop); // jumps, puis eats
287286
*/!*
288287
```
289288

290-
Si ce n'est pas ce que nous voulons et que nous aimerions exclure les propriétés héritées, il existe une méthode intégrée [obj.hasOwnProperty(key)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/hasOwnProperty): elle renvoie `true` si `obj` a sa propre propriété (non héritée) nommée `key`.
289+
Si ce n'est pas ce que nous voulons et que nous aimerions exclure les propriétés héritées, il existe une méthode intégrée [obj.hasOwnProperty(key)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/hasOwnProperty) : elle renvoie `true` si `obj` a sa propre propriété (non héritée) nommée `key`.
291290

292291
Nous pouvons donc filtrer les propriétés héritées (ou faire autre chose avec elles) :
293292

@@ -312,15 +311,15 @@ for(let prop in rabbit) {
312311
}
313312
```
314313

315-
Nous avons ici la chaîne d'héritage suivante: `rabbit` hérite de `animal`, qui lui hérite de `Object.prototype` (car `animal` est un objet littéral `{...}`, donc c'est par défaut), puis `null` au-dessus :
314+
Nous avons ici la chaîne d'héritage suivante : `rabbit` hérite de `animal`, qui lui hérite de `Object.prototype` (car `animal` est un objet littéral `{...}`, donc c'est par défaut), puis `null` au-dessus :
316315

317316
![](rabbit-animal-object.svg)
318317

319-
Remarque, il y a une chose amusante. D'où vient la méthode `rabbit.hasOwnProperty`? Nous ne l'avons pas défini. En regardant la chaîne, nous pouvons voir que la méthode est fournie par `Object.prototype.hasOwnProperty`. En d'autres termes, c'est hérité.
318+
Remarque, il y a une chose amusante. D'où vient la méthode `rabbit.hasOwnProperty` ? Nous ne l'avons pas défini. En regardant la chaîne, nous pouvons voir que la méthode est fournie par `Object.prototype.hasOwnProperty`. En d'autres termes, c'est hérité.
320319

321320
...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.
322321

323-
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 `Object.prototype` ne sont pas listés.
324323

325324
```smart header="Presque toutes les autres méthodes d'obtention de clé/valeur ignorent les propriétés héritées"
326325
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.

0 commit comments

Comments
 (0)