Skip to content

Commit f5311f9

Browse files
authored
Merge pull request #465 from ArmandDelessert/patch-1-js-09-classes
Apporte plusieurs corrections aux parties 1 à 4 du chapitre 1.9 (Classes)
2 parents 4020dc6 + f14f291 commit f5311f9

File tree

6 files changed

+155
-153
lines changed

6 files changed

+155
-153
lines changed

1-js/09-classes/01-class/article.md

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ Mais dans le JavaScript moderne, il y a une construction de la "classe" plus ava
1313

1414
## La syntaxe de "classe"
1515

16-
La syntaxe de base est:
16+
La syntaxe de base est :
17+
1718
```js
1819
class MyClass {
1920
// Les méthodes de la classe
@@ -27,9 +28,9 @@ class MyClass {
2728

2829
Vous pouvez ensuite utiliser `new MyClass()` pour créer un nouvel objet ayant toute la liste des méthodes.
2930

30-
La méthode `constructor()` est automatiquement appelée par `new`, donc nous pouvons initialiser l'objet à ce niveau.
31+
La méthode `constructor()` est automatiquement appelée par `new`, donc nous pouvons initialiser l'objet à ce niveau.
3132

32-
Par exemple:
33+
Par exemple :
3334

3435
```js run
3536
class User {
@@ -50,81 +51,80 @@ user.sayHi();
5051
```
5152

5253
Lorsque `new User("John")` est appelé :
54+
5355
1. Un nouvel objet est créé.
5456
2. Le `constructor` s'exécute avec les arguments qui lui sont passés et assigne `this.name` a l'objet.
5557

5658
...ensuite nous pouvons appeler les méthodes de l'objet, tel que `user.sayHi()`.
5759

58-
5960
```warn header="Pas de virgule entre les méthodes de la classe"
60-
Un piège fréquent des développeurs novices est de mettre une virgule entre les méthodes de la classe, entrainant ainsi une erreur syntaxique.
61+
Un piège fréquent des développeurs novices est de mettre une virgule entre les méthodes de la classe, entrainant ainsi une erreur syntaxique.
6162
6263
La notation ici ne doit pas être confondue avec les objets littéraux. A l'intérieure d'une classe, aucune virgule n'est requise.
6364
```
6465

65-
## Qu'est-ce qu'une classe?
66+
## Qu'est-ce qu'une classe ?
6667

67-
Alors, c'est quoi exactement une `class`? Ce n'est pas totalement une nouvelle entité au niveau de la langue, comme on pourrait le penser.
68+
Alors, c'est quoi exactement une `class` ? Ce n'est pas totalement une nouvelle entité au niveau du langage, comme on pourrait le penser.
6869

69-
Dévoilons maintenant la magie et regardons ce qu'est réellement une classe. Cela va nous aider à comprendre plusieurs aspects complexes.
70+
Dévoilons maintenant la magie et regardons ce qu'est réellement une classe. Cela va nous aider à comprendre plusieurs aspects complexes.
7071

7172
En JavaScript, une classe est une sorte de fonction.
7273

73-
Regardons ici:
74+
Regardons ici :
7475

7576
```js run
7677
class User {
7778
constructor(name) { this.name = name; }
7879
sayHi() { alert(this.name); }
7980
}
8081

81-
// La preuve: User est une fonction
82+
// La preuve : User est une fonction
8283
*!*
8384
alert(typeof User); // function
8485
*/!*
8586
```
8687

87-
Ce que `class User {...}` la construction fait en réalité est de:
88+
Ce que la construction de la classe `classe User {...}` fait réellement, c'est :
8889

89-
1. Créer une fonction nommée `User`, qui devient le résultat de la déclaration de la classe. Le code de la fonction est tirée de la méthode `constructor` (considérée comme étant vide au cas ou cette méthode n'est pas écrite).
90+
1. Créer une fonction nommée `User`, qui devient le résultat de la déclaration de la classe. Le code de la fonction est tirée de la méthode `constructor` (considérée comme étant vide au cas ou cette méthode n'est pas écrite).
9091
2. Garde les méthodes de la classe, telle que `sayHi`, dans `User.prototype`.
9192

9293
Après la création de `new User`, lorsque nous appelons sa méthode, elle est extraite du prototype, comme décrit dans le chapitre <info:function-prototype>. Donc, l'objet a accès aux méthodes de classe.
9394

94-
Nous pouvons illustrer le résultat de la déclaration de `class User` par :
95+
Nous pouvons illustrer le résultat de la déclaration de `class User` ainsi :
9596

96-
Nous pouvons illustrer le résultat de la déclaration de `class User` ainsi:
9797
![](class-user.svg)
9898

99-
Voici le code pour une introspection:
99+
Voici le code pour une introspection :
100100

101101
```js run
102102
class User {
103103
constructor(name) { this.name = name; }
104104
sayHi() { alert(this.name); }
105105
}
106106

107-
// classe est une function
107+
// classe est une fonction
108108
alert(typeof User); // function
109109

110110
// ...ou, plus précisément, le constructeur de la méthode
111111
alert(User === User.prototype.constructor); // true
112112

113-
// Les méthodes sont dans User.prototype, par exemple :
113+
// Les méthodes sont dans User.prototype, par exemple :
114114
alert(User.prototype.sayHi); // le code de la méthode sayHi
115115

116116
// Il y a exactement deux méthodes dans le prototype
117117
alert(Object.getOwnPropertyNames(User.prototype)); // constructeur, sayHi
118118
```
119119

120-
## Pas simplement un sucre syntaxique
120+
## Pas simplement un sucre syntaxique
121121

122-
Parfois certaines personnes disent que la notion de `class` est un "sucre syntaxique" (une syntaxe qui est destinée à rendre la lecture plus facile, mais elle n'introduit rien de nouveau), parce qu'en réalité nous pouvons déclarer la même chose sans utiliser le mot clé `classe` :
122+
Parfois certaines personnes disent que la notion de `class` est un "sucre syntaxique" (une syntaxe qui est destinée à rendre la lecture plus facile, mais elle n'introduit rien de nouveau), parce qu'en réalité nous pouvons déclarer la même chose sans utiliser le mot clé `class` :
123123

124124
```js run
125125
// Réécriture de class User en fonctions pures
126126

127-
// 1. Créer la fonction constructeur
127+
// 1. Créer la fonction constructeur
128128
function User(name) {
129129
this.name = name;
130130
}
@@ -158,7 +158,7 @@ Cependant, il existe des différences importantes.
158158
User(); // Erreur: le constructeur Class User ne peut être invoque sans 'new'
159159
```
160160

161-
Aussi, la représentation en chaine de caractère d'un constructeur de class dans la plupart des moteurs de JavaScript commence avec la "class..."
161+
Aussi, la représentation en chaîne de caractères d'un constructeur de class dans la plupart des moteurs de JavaScript commence avec "class..." :
162162
163163
```js run
164164
class User {
@@ -167,10 +167,11 @@ Cependant, il existe des différences importantes.
167167
168168
alert(User); // class User { ... }
169169
```
170-
There are other differences, we'll see them soon.
170+
171+
Il y a d'autres différences, nous les verrons bientôt.
171172

172173
2. Les méthodes de Class sont non-énumérable.
173-
Une définition de la classe attribue à la propriété `énumérable` le drapeau de `false` a les méthodes du `"prototype"`.
174+
Une définition de la classe attribue `false` à la propriété `enumerable` pour toutes les méthodes du `"prototype"`.
174175

175176
C'est bien, parce que si nous exécutons un `for..in` sur un Object, souvent nous ne voulons pas accéder aux méthodes de sa classe.
176177
@@ -179,11 +180,11 @@ Cependant, il existe des différences importantes.
179180

180181
En outres, la syntaxe `classe` apporte beaucoup d'autres caractéristiques que nous allons explorer plus tard.
181182
182-
## L'Expression Class
183+
## L'Expression Class
183184

184185
Tout comme les fonctions, les classes peuvent être définies a l'intérieur d'une autre expression, passées en paramètres, retournées, assignées etc.
185186

186-
Voici un exemple d'expression d'une classe:
187+
Voici un exemple d'expression d'une classe :
187188

188189
```js
189190
let User = class {
@@ -195,46 +196,45 @@ let User = class {
195196

196197
Similairement aux Fonction Expressions nommées, les expressions de classe peuvent avoir un nom.
197198

198-
Si une expression de classe a un nom, il est visible à l'intérieur de la classe uniquement:
199+
Si une expression de classe a un nom, il est visible à l'intérieur de la classe uniquement :
199200
200201
```js run
201202
// "Expression de Classe nommée"
202203
// (Terme non existant dans la spécification, mais elle est similaire a une Expression de Fonction nommée)
203204
let User = class *!*MyClass*/!* {
204205
sayHi() {
205-
alert(MyClass); // le nom MyClass est seulement visible dans la classe
206+
alert(MyClass); // le nom MyClass est seulement visible dans la classe
206207
}
207208
};
208209
209-
new User().sayHi(); // ça fonctionne, montre la définition de MyClass
210+
new User().sayHi(); // ça fonctionne, montre la définition de MyClass
210211
211212
alert(MyClass); // erreur, le nom MyClass n'est pas visible en dehors de la classe
212213
```
213214

214-
Nous pouvons même créer les classes dynamiquement "a la demande", comme ainsi :
215+
Nous pouvons même créer les classes dynamiquement "à la demande", comme suit :
215216

216217
```js run
217218
function makeClass(phrase) {
218-
// déclare une classe et la retourne
219+
// déclare une classe et la retourne
219220
return class {
220221
sayHi() {
221222
alert(phrase);
222223
}
223224
};
224225
}
225226

226-
// Cree une nouvelle classe
227+
// Crée une nouvelle classe
227228
let User = makeClass("Hello");
228229

229230
new User().sayHi(); // Hello
230231
```
231232

232-
233233
## Accesseurs/Mutateurs
234234

235235
Tout comme les objets littéraux, les classes peuvent inclure des accesseurs/mutateurs, des propriétés évaluées etc.
236236

237-
Voici un exemple pour `user.name` implémente en utilisant les propriétés `get/set`:
237+
Voici un exemple pour `user.name` implémenté en utilisant les propriétés `get`/`set` :
238238

239239
```js run
240240
class User {
@@ -292,7 +292,7 @@ Ces caractéristiques sont faciles à retenir, car elles ressemblent à celles d
292292

293293
## Champs de classe
294294

295-
```warn header="les anciens navigateurs peuvent avoir besoin de polyfill"
295+
```warn header="Les anciens navigateurs peuvent avoir besoin de polyfill"
296296
Les propriétés de classe sont un ajout récent au langage.
297297
```
298298

@@ -316,9 +316,9 @@ class User {
316316
new User().sayHi(); // Hello, John!
317317
```
318318

319-
So, we just write "<property name> = <value>" in the declaration, and that's it.
319+
Il suffit donc d'écrire "<property name> = <value>" dans la déclaration, et c'est tout.
320320

321-
The important difference of class fields is that they are set on individual objects, not `User.prototype`:
321+
La différence importante des champs de classe est qu'ils sont définis sur des objets individuels, et non sur `User.prototype` :
322322

323323
```js run
324324
class User {
@@ -345,7 +345,6 @@ let user = new User();
345345
alert(user.name); // John
346346
```
347347

348-
349348
### Création de méthodes liées avec des champs de classe
350349

351350
Comme démontré dans le chapitre <info:bind> les fonctions en JavaScript ont un `this` dynamique. Cela dépend du contexte de l'appel.
@@ -377,7 +376,7 @@ Le problème est appelé "perdre le `this`".
377376
Il existe deux approches pour le corriger, comme indiqué dans le chapitre <info:bind> :
378377

379378
1. Passer une fonction wrapper, telle que `setTimeout(() => button.click(), 1000)`.
380-
2. Liez la méthode à un objet, par exemple chez le constructeur :
379+
2. Lier la méthode à l'objet, par exemple dans le constructeur.
381380

382381
Les champs de classe fournissent une syntaxe plus élégante :
383382

@@ -404,17 +403,17 @@ C'est particulièrement utile dans un environnement de navigateur, pour les éco
404403

405404
## Résumé
406405

407-
La syntaxe de base d'une classe ressemble à ceci:
406+
La syntaxe de base d'une classe ressemble à ceci :
408407

409408
```js
410409
class MyClass {
411-
prop = value; // propriete
410+
prop = value; // propriété
412411

413412
constructor(...) { // constructeur
414413
// ...
415414
}
416415

417-
method(...) {} // methode
416+
method(...) {} // méthode
418417

419418
get something(...) {} // méthode définie avec un accesseur
420419
set something(...) {} // méthode définie avec un mutateur

0 commit comments

Comments
 (0)