Skip to content

Commit 30f373d

Browse files
authored
Small fixes
Changes "prototypique" to "prototypal" and spaces around ":"
1 parent c445c27 commit 30f373d

File tree

1 file changed

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

1 file changed

+21
-21
lines changed

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

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
# Héritage prototypique
1+
# Héritage prototypal
22

33
En programmation, nous voulons souvent prendre quelque chose et l’étendre.
44

55
Par exemple, nous avons un objet `user` avec ses propriétés et méthodes et souhaitons en faire des variantes `admin` et `guest` légèrement modifiées. Nous aimerions réutiliser ce que nous avons dans `user`, et non pas copier/réimplémenter ses méthodes, mais simplement créer un nouvel objet par-dessus.
66

7-
*L'héritage prototypique* est une fonctionnalité de langage qui aide à cela.
7+
*L'héritage prototypal* est une fonctionnalité de langage qui aide à cela.
88

99
## [[Prototype]]
1010

11-
En JavaScript, les objets ont une propriété cachée spéciale `[[Prototype]]` (comme indiqué dans la spécification), qui est soit `null` ou fait référence à un autre objet. Cet objet s'appelle "un prototype":
11+
En JavaScript, les objets ont une propriété cachée spéciale `[[Prototype]]` (comme indiqué dans la spécification), qui est soit `null` ou fait référence à un autre objet. Cet objet s'appelle "un prototype" :
1212

1313
![prototype](object-prototype-empty.svg)
1414

15-
Le prototype est un peu "magique". Lorsque nous voulons lire une propriété de `object`, et qu'elle en manque, JavaScript la prend automatiquement à partir du prototype. En programmation, cela s'appelle "l'héritage prototypique". De nombreuses fonctionnalités et techniques de programmation intéressantes sont basées sur elle.
15+
Le prototype est un peu "magique". Lorsque nous voulons lire une propriété de `object`, et qu'elle en manque, JavaScript la prend automatiquement à partir du prototype. En programmation, cela s'appelle "l'héritage prototypal". De nombreuses fonctionnalités et techniques de programmation intéressantes sont basées sur elle.
1616

1717
La propriété `[[Prototype]]` est interne et cachée, mais il y a plusieurs façons de la définir.
1818

19-
L'un d'eux consiste à utiliser `__proto__`, comme ceci:
19+
L'un d'eux consiste à utiliser `__proto__`, comme ceci :
2020

2121
```js run
2222
let animal = {
@@ -64,15 +64,15 @@ alert( rabbit.jumps ); // true
6464

6565
Ici, la ligne `(*)` définit `animal` pour être un prototype de` lapin`.
6666

67-
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):
67+
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) :
6868

6969
![](proto-animal-rabbit.svg)
7070

71-
Ici, nous pouvons dire que "`animal` est le prototype de `rabbit`" ou que "`rabit` hérite de manière prototypique de `animal`".
71+
Ici, nous pouvons dire que "`animal` est le prototype de `rabbit`" ou que "`rabit` hérite de manière prototypal de `animal`".
7272

7373
Donc, si `animal` a beaucoup de propriétés et de méthodes utiles, elles deviennent automatiquement disponibles dans `rabbit`. De telles propriétés sont appelées "héritées".
7474

75-
Si nous avons une méthode dans `animal`, elle peut être appelée sur `rabbit`:
75+
Si nous avons une méthode dans `animal`, elle peut être appelée sur `rabbit` :
7676

7777
```js run
7878
let animal = {
@@ -95,11 +95,11 @@ rabbit.walk(); // Animal walk
9595
*/!*
9696
```
9797

98-
La méthode est automatiquement prise à partir du prototype, comme ceci:
98+
La méthode est automatiquement prise à partir du prototype, comme ceci :
9999

100100
![](proto-animal-rabbit-walk.svg)
101101

102-
La chaîne de prototypes peut être plus longue:
102+
La chaîne de prototypes peut être plus longue :
103103

104104
```js run
105105
let animal = {
@@ -130,7 +130,7 @@ alert(longEar.jumps); // true (de rabbit)
130130

131131
![](proto-animal-rabbit-chain.svg)
132132

133-
Il n'y a que deux limitations:
133+
Il n'y a que deux limitations :
134134

135135
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.
136136
2. La valeur de `__proto__` peut être un objet ou `null`. Les autres types sont ignorés.
@@ -143,7 +143,7 @@ Le prototype n'est utilisé que pour la lecture des propriétés.
143143

144144
Les opérations d'écriture/suppression fonctionnent directement avec l'objet.
145145

146-
Dans l'exemple ci-dessous, nous affectons sa propre méthode `walk` à `rabbit`:
146+
Dans l'exemple ci-dessous, nous affectons sa propre méthode `walk` à `rabbit` :
147147

148148
```js run
149149
let animal = {
@@ -166,13 +166,13 @@ rabbit.walk = function() {
166166
rabbit.walk(); // Rabbit! Bounce-bounce!
167167
```
168168

169-
A partir de maintenant, l'appel `rabbit.walk()` trouve la méthode immédiatement dans l'objet et l'exécute, sans utiliser le prototype:
169+
A partir de maintenant, l'appel `rabbit.walk()` trouve la méthode immédiatement dans l'objet et l'exécute, sans utiliser le prototype :
170170

171171
![](proto-animal-rabbit-walk-2.svg)
172172

173173
Les propriétés d'accesseur constituent une exception, car l'affectation est gérée par une fonction mutateur. Donc, écrire dans une telle propriété revient en fait à appeler une fonction.
174174

175-
Pour cette raison, `admin.fullName` fonctionne correctement dans le code ci-dessous:
175+
Pour cette raison, `admin.fullName` fonctionne correctement dans le code ci-dessous :
176176

177177
```js run
178178
let user = {
@@ -203,7 +203,7 @@ Ici dans la ligne `(*)` la propriété `admin.fullName` a un accesseur dans le p
203203

204204
## La valeur de "this"
205205

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

208208
La réponse est simple: `this` n'est pas du tout affecté par les prototypes.
209209

@@ -215,7 +215,7 @@ C'est en fait une chose très importante, car nous pouvons avoir un gros objet a
215215

216216
Par exemple, ici `animal` représente un "stockage de méthode" et `rabbit` en fait usage.
217217

218-
L'appel `rabbit.sleep()` définit `this.isSleeping` sur l'objet `rabbit`:
218+
L'appel `rabbit.sleep()` définit `this.isSleeping` sur l'objet `rabbit` :
219219

220220
```js run
221221
// animal a des méthodes
@@ -242,7 +242,7 @@ alert(rabbit.isSleeping); // true
242242
alert(animal.isSleeping); // undefined (aucune propriété de ce type dans le prototype)
243243
```
244244

245-
L'image résultante:
245+
L'image résultante :
246246

247247
![](proto-animal-rabbit-walk-3.svg)
248248

@@ -254,7 +254,7 @@ En conséquence, les méthodes sont partagées, mais pas l'état d'objet.
254254

255255
La boucle `for..in` boucle aussi sur les propriétés héritées.
256256

257-
Par exemple:
257+
Par exemple :
258258

259259
```js run
260260
let animal = {
@@ -279,7 +279,7 @@ for(let prop in rabbit) alert(prop); // jumps, puis eats
279279

280280
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): il renvoie `true` si `obj` a sa propre propriété (non héritée) nommée `key`.
281281

282-
Nous pouvons donc filtrer les propriétés héritées (ou faire autre chose avec elles):
282+
Nous pouvons donc filtrer les propriétés héritées (ou faire autre chose avec elles) :
283283

284284
```js run
285285
let animal = {
@@ -295,14 +295,14 @@ for(let prop in rabbit) {
295295
let isOwn = rabbit.hasOwnProperty(prop);
296296

297297
if (isOwn) {
298-
alert(`Our: ${prop}`); // Our: jumps
298+
alert(`Our: ${prop}`); // Our : jumps
299299
} else {
300300
alert(`Inherited: ${prop}`); // Inherited: eats
301301
}
302302
}
303303
```
304304

305-
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:
305+
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 :
306306

307307
![](rabbit-animal-object.svg)
308308

0 commit comments

Comments
 (0)