You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/09-classes/01-class/article.md
+40-41Lines changed: 40 additions & 41 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,8 @@ Mais dans le JavaScript moderne, il y a une construction de la "classe" plus ava
13
13
14
14
## La syntaxe de "classe"
15
15
16
-
La syntaxe de base est:
16
+
La syntaxe de base est :
17
+
17
18
```js
18
19
classMyClass {
19
20
// Les méthodes de la classe
@@ -27,9 +28,9 @@ class MyClass {
27
28
28
29
Vous pouvez ensuite utiliser `new MyClass()` pour créer un nouvel objet ayant toute la liste des méthodes.
29
30
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.
31
32
32
-
Par exemple:
33
+
Par exemple:
33
34
34
35
```js run
35
36
classUser {
@@ -50,81 +51,80 @@ user.sayHi();
50
51
```
51
52
52
53
Lorsque `new User("John")` est appelé :
54
+
53
55
1. Un nouvel objet est créé.
54
56
2. Le `constructor` s'exécute avec les arguments qui lui sont passés et assigne `this.name` a l'objet.
55
57
56
58
...ensuite nous pouvons appeler les méthodes de l'objet, tel que `user.sayHi()`.
57
59
58
-
59
60
```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.
61
62
62
63
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.
63
64
```
64
65
65
-
## Qu'est-ce qu'une classe?
66
+
## Qu'est-ce qu'une classe?
66
67
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.
68
69
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.
70
71
71
72
En JavaScript, une classe est une sorte de fonction.
72
73
73
-
Regardons ici:
74
+
Regardons ici:
74
75
75
76
```js run
76
77
classUser {
77
78
constructor(name) { this.name= name; }
78
79
sayHi() { alert(this.name); }
79
80
}
80
81
81
-
// La preuve: User est une fonction
82
+
// La preuve: User est une fonction
82
83
*!*
83
84
alert(typeof User); // function
84
85
*/!*
85
86
```
86
87
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 :
88
89
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).
90
91
2. Garde les méthodes de la classe, telle que `sayHi`, dans `User.prototype`.
91
92
92
93
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.
93
94
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 :
95
96
96
-
Nous pouvons illustrer le résultat de la déclaration de `class User` ainsi:
97
97

98
98
99
-
Voici le code pour une introspection:
99
+
Voici le code pour une introspection:
100
100
101
101
```js run
102
102
classUser {
103
103
constructor(name) { this.name= name; }
104
104
sayHi() { alert(this.name); }
105
105
}
106
106
107
-
// classe est une function
107
+
// classe est une fonction
108
108
alert(typeof User); // function
109
109
110
110
// ...ou, plus précisément, le constructeur de la méthode
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` :
123
123
124
124
```js run
125
125
// Réécriture de class User en fonctions pures
126
126
127
-
// 1. Créer la fonction constructeur
127
+
// 1. Créer la fonction constructeur
128
128
functionUser(name) {
129
129
this.name= name;
130
130
}
@@ -158,7 +158,7 @@ Cependant, il existe des différences importantes.
158
158
User(); // Erreur: le constructeur Class User ne peut être invoque sans 'new'
159
159
```
160
160
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..." :
162
162
163
163
```js run
164
164
class User {
@@ -167,10 +167,11 @@ Cependant, il existe des différences importantes.
167
167
168
168
alert(User); // class User { ... }
169
169
```
170
-
There are other differences, we'll see them soon.
170
+
171
+
Il y a d'autres différences, nous les verrons bientôt.
171
172
172
173
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"`.
174
175
175
176
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.
176
177
@@ -179,11 +180,11 @@ Cependant, il existe des différences importantes.
179
180
180
181
En outres, la syntaxe `classe` apporte beaucoup d'autres caractéristiques que nous allons explorer plus tard.
181
182
182
-
## L'Expression Class
183
+
## L'Expression Class
183
184
184
185
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.
185
186
186
-
Voici un exemple d'expression d'une classe:
187
+
Voici un exemple d'expression d'une classe:
187
188
188
189
```js
189
190
let User = class {
@@ -195,46 +196,45 @@ let User = class {
195
196
196
197
Similairement aux Fonction Expressions nommées, les expressions de classe peuvent avoir un nom.
197
198
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:
199
200
200
201
```js run
201
202
// "Expression de Classe nommée"
202
203
// (Terme non existant dans la spécification, mais elle est similaire a une Expression de Fonction nommée)
203
204
let User = class *!*MyClass*/!* {
204
205
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
206
207
}
207
208
};
208
209
209
-
new User().sayHi(); // ça fonctionne, montre la définition de MyClass
210
+
new User().sayHi(); // ça fonctionne, montre la définition de MyClass
210
211
211
212
alert(MyClass); // erreur, le nom MyClass n'est pas visible en dehors de la classe
212
213
```
213
214
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 :
215
216
216
217
```js run
217
218
functionmakeClass(phrase) {
218
-
// déclare une classe et la retourne
219
+
// déclare une classe et la retourne
219
220
returnclass {
220
221
sayHi() {
221
222
alert(phrase);
222
223
}
223
224
};
224
225
}
225
226
226
-
//Cree une nouvelle classe
227
+
//Crée une nouvelle classe
227
228
let User =makeClass("Hello");
228
229
229
230
newUser().sayHi(); // Hello
230
231
```
231
232
232
-
233
233
## Accesseurs/Mutateurs
234
234
235
235
Tout comme les objets littéraux, les classes peuvent inclure des accesseurs/mutateurs, des propriétés évaluées etc.
236
236
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`:
238
238
239
239
```js run
240
240
classUser {
@@ -292,7 +292,7 @@ Ces caractéristiques sont faciles à retenir, car elles ressemblent à celles d
292
292
293
293
## Champs de classe
294
294
295
-
```warn header="les anciens navigateurs peuvent avoir besoin de polyfill"
295
+
```warn header="Les anciens navigateurs peuvent avoir besoin de polyfill"
296
296
Les propriétés de classe sont un ajout récent au langage.
297
297
```
298
298
@@ -316,9 +316,9 @@ class User {
316
316
newUser().sayHi(); // Hello, John!
317
317
```
318
318
319
-
So, we just write "<propertyname> = <value>" in the declaration, and that's it.
319
+
Il suffit donc d'écrire "<propertyname> = <value>" dans la déclaration, et c'est tout.
320
320
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`:
322
322
323
323
```js run
324
324
classUser {
@@ -345,7 +345,6 @@ let user = new User();
345
345
alert(user.name); // John
346
346
```
347
347
348
-
349
348
### Création de méthodes liées avec des champs de classe
350
349
351
350
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`".
377
376
Il existe deux approches pour le corriger, comme indiqué dans le chapitre <info:bind> :
378
377
379
378
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.
381
380
382
381
Les champs de classe fournissent une syntaxe plus élégante :
383
382
@@ -404,17 +403,17 @@ C'est particulièrement utile dans un environnement de navigateur, pour les éco
404
403
405
404
## Résumé
406
405
407
-
La syntaxe de base d'une classe ressemble à ceci:
406
+
La syntaxe de base d'une classe ressemble à ceci:
408
407
409
408
```js
410
409
classMyClass {
411
-
prop = value; //propriete
410
+
prop = value; //propriété
412
411
413
412
constructor(...) { // constructeur
414
413
// ...
415
414
}
416
415
417
-
method(...) {} //methode
416
+
method(...) {} //méthode
418
417
419
418
getsomething(...) {} // méthode définie avec un accesseur
420
419
setsomething(...) {} // méthode définie avec un mutateur
0 commit comments