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
In object-oriented programming, a *class* is an extensible program-code-template for creating objects, providing initial values for state (member variables) and implementations of behavior (member functions or methods).
5
+
En langage orienté objet, une *classe* est un modèle de code programme extensible servant à créer des objets. Elle fournit les valeurs initiales de l'état (les variables membres) et de l'implémentation du comportement (les fonctions ou méthodes membres).
6
6
```
7
7
8
-
In practice, we often need to create many objects of the same kind, like users, or goods or whatever.
8
+
En pratique, nous avons souvent besoin de créer beaucoup d'objets de même type, tels que des utilisateurs, des biens ou toute autre chose.
9
9
10
-
As we already know from the chapter<info:constructor-new>, `new function`can help with that.
10
+
Comme nous le savons dans le chapitre<info:constructor-new>, `new function`peut nous aider à faire cela.
11
11
12
-
But in the modern JavaScript, there's a more advanced "class" construct, that introduces great new features which are useful for object-oriented programming.
12
+
Mais dans le JavaScript moderne, il y a une construction de la "classe" plus avancée qui introduit de nombreux nouveaux aspects utiles en langage orienté objet.
13
13
14
-
## The "class" syntax
14
+
## La syntaxe de "classe"
15
15
16
-
The basic syntax is:
16
+
La syntaxe de base est:
17
17
```js
18
18
classMyClass {
19
-
//class methods
19
+
//Les méthodes de la classe
20
20
constructor() { ... }
21
21
method1() { ... }
22
22
method2() { ... }
@@ -25,11 +25,11 @@ class MyClass {
25
25
}
26
26
```
27
27
28
-
Then use `new MyClass()`to create a new object with all the listed methods.
28
+
Vous pouvez ensuite utiliser `new MyClass()`pour créer un nouvel objet ayant toute la liste des méthodes.
29
29
30
-
The `constructor()`method is called automatically by`new`, so we can initialize the object there.
30
+
La méthode `constructor()` est automatiquement appelée par`new`, donc nous pouvons initialiser l'objet à ce niveau.
31
31
32
-
For example:
32
+
Par exemple:
33
33
34
34
```js run
35
35
classUser {
@@ -49,88 +49,87 @@ let user = new User("John");
49
49
user.sayHi();
50
50
```
51
51
52
-
When`new User("John")`is called:
53
-
1.A new object is created.
54
-
2.The`constructor`runs with the given argument and assigns `this.name`to it.
52
+
Lorsque`new User("John")`est appelé:
53
+
1.Un nouvel objet est créé.
54
+
2.Le`constructor`s'exécute avec les arguments qui lui sont passés et assigne `this.name`a l'objet.
55
55
56
-
...Then we can call object methods, such as`user.sayHi()`.
56
+
...ensuite nous pouvons appeler les méthodes de l'objet, tel que`user.sayHi()`.
57
57
58
58
59
-
```warn header="No comma between class methods"
60
-
A common pitfall for novice developers is to put a comma between class methods, which would result in a syntax error.
59
+
```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
61
62
-
The notation here is not to be confused with object literals. Within the class, no commas are required.
62
+
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
63
```
64
64
65
-
## What is a class?
65
+
## Qu'est-ce qu'une classe?
66
66
67
-
So, what exactly is a`class`? That's not an entirely new language-level entity, as one might think.
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
68
69
-
Let's unveil any magic and see what a class really is. That'll help in understanding many complex aspects.
69
+
Dévoilons maintenant la magie et regardons ce qu'est réellement une classe. Cela va nous aider à comprendre plusieurs aspects complexes.
70
70
71
-
In JavaScript, a class is a kind of a function.
71
+
En JavaScript, une classe est une sorte de fonction.
72
72
73
-
Here, take a look:
73
+
Regardons ici:
74
74
75
75
```js run
76
76
classUser {
77
77
constructor(name) { this.name= name; }
78
78
sayHi() { alert(this.name); }
79
79
}
80
80
81
-
//proof: User is a function
81
+
//La preuve: User est une fonction
82
82
*!*
83
83
alert(typeof User); // function
84
84
*/!*
85
85
```
86
86
87
-
What `class User {...}`construct really does is:
87
+
Ce que `class User {...}`la construction fait en réalité est de:
88
88
89
-
1.Creates a function named`User`, that becomes the result of the class declaration. The function code is taken from the `constructor`method (assumed empty if we don't write such method).
90
-
2.Stores class methods, such as`sayHi`, in`User.prototype`.
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
+
2.Garde les méthodes de la classe, telle que`sayHi`, dans`User.prototype`.
91
91
92
-
Afterwards, for `new User` objects, when we call a method, it's taken from the prototype, just as described in the chapter <info:function-prototype>. So the object has access to class methods.
93
-
94
-
We can illustrate the result of `class User` declaration as:
92
+
Apres cela, pour les nouveaux objets `new User`, lorsqu'on appelle une méthode, elle est prise à partir du prototype, ainsi qu'on vient juste de décrire dans le chapitre <info:function-prototype>. Ainsi l'objet a accès aux méthodes de la classe.
95
93
94
+
Nous pouvons illustrer le résultat de la déclaration de `class User` ainsi:
96
95

97
96
98
-
Here's the code to introspect it:
97
+
Voici le code pour une introspection:
99
98
100
99
```js run
101
100
classUser {
102
101
constructor(name) { this.name= name; }
103
102
sayHi() { alert(this.name); }
104
103
}
105
104
106
-
//class is a function
105
+
//classe est une function
107
106
alert(typeof User); // function
108
107
109
-
// ...or, more precisely, the constructor method
108
+
// ...ou, plus précisément, le constructeur de la méthode
Sometimes people say that `class`is a "syntax sugar" (syntax that is designed to make things easier to read, but doesn't introduce anything new), because we could actually declare the same without `class` keyword at all:
120
+
Parfois certaines personnes disent 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 que en réalité nous pouvons déclarer la même chose sans aucunement utiliser le mot clé `classe`:
122
121
123
122
```js run
124
-
//rewriting class User in pure functions
123
+
//Réécriture de class User en fonctions pures
125
124
126
-
// 1. Create constructor function
125
+
// 1. Créer la fonction constructeur
127
126
functionUser(name) {
128
127
this.name= name;
129
128
}
130
-
//any function prototype has constructor property by default,
131
-
//so we don't need to create it
129
+
//Tout prototype de fonction a une propriété constructeur par défaut,
130
+
//Alors nous n'avons pas besoin de le créer
132
131
133
-
// 2. Add the method to prototype
132
+
// 2. Ajouter la méthode au prototype
134
133
User.prototype.sayHi=function() {
135
134
alert(this.name);
136
135
};
@@ -140,24 +139,24 @@ let user = new User("John");
140
139
user.sayHi();
141
140
```
142
141
143
-
The result of this definition is about the same. So, there are indeed reasons why `class`can be considered a syntax sugar to define a constructor together with its prototype methods.
142
+
Le résultat de cette définition est à peu près la même chose. Donc, il y a bien raison de vouloir considérer `class`comme pouvant être un sucre syntaxique pour définir un constructeur ensemble avec ses méthodes de prototype.
144
143
145
-
Although, there are important differences.
144
+
Bien qu’il y ait des différences importantes.
146
145
147
-
1.First, a function created by `class` is labelled by a special internal property `[[FunctionKind]]:"classConstructor"`. So it's not entirely the same as creating it manually.
146
+
1.Tout d'abord, une fonction crée par une `classe` est labélisé par une propriété interne spéciale nommée `[[FunctionKind]]:"classConstructor"`. Donc ce n'est pas tout à fait la même chose que de la créer manuellement.
148
147
149
-
Unlike a regular function, a class constructor must be called with`new`:
148
+
Contrairement à une fonction normale, un constructeur de class doit être invoquée avec`new`:
150
149
151
150
```js run
152
151
classUser {
153
152
constructor() {}
154
153
}
155
154
156
-
alert(typeof User); //function
157
-
User(); //Error: Class constructor User cannot be invoked without 'new'
155
+
alert(typeof User); //fonction
156
+
User(); //Erreur: le constructeur Class User ne peut être invoque sans 'new'
158
157
```
159
158
160
-
Also, a string representation of a classconstructorin most JavaScript engines starts with the"class..."
159
+
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
160
162
161
```js run
163
162
class User {
@@ -167,21 +166,21 @@ Although, there are important differences.
167
166
alert(User); // class User { ... }
168
167
```
169
168
170
-
2.Class methods are non-enumerable.
171
-
Aclassdefinition sets `enumerable` flag to `false`for all methods in the`"prototype"`.
169
+
2. Les méthodes de Class sont non-énumérable.
170
+
Une définition de la classe attribue à la propriété `énumérable` le drapeau de `false` a les méthodes du `"prototype"`.
172
171
173
-
That's good, because if we `for..in` over an object, we usually don't want its classmethods.
172
+
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.
174
173
175
-
3. Classes always`use strict`.
176
-
All code inside the classconstruct is automatically in strict mode.
174
+
3.Les Classes utilisent toujours`use strict`.
175
+
Tout code à l'intérieur de la construction de la classe est automatiquement en mode strict.
177
176
178
-
Besides, `class` syntax brings many other features that we'll explore later.
177
+
En outres, la syntaxe `classe` apporte beaucoup d'autres caractéristiques que nous allons explorer plus tard.
179
178
180
-
## Class Expression
179
+
## L'Expression Class
181
180
182
-
Just like functions, classes can be defined inside another expression, passed around, returned, assigned etc.
181
+
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.
183
182
184
-
Here's an example of a classexpression:
183
+
Voici un exemple d'expression d'une classe:
185
184
186
185
```js
187
186
let User = class {
@@ -191,55 +190,55 @@ let User = class {
191
190
};
192
191
```
193
192
194
-
Similar to Named FunctionExpressions, classexpressionsmay have a name.
193
+
Similairement aux Fonction Expressions nommées, les expressions de classe peuvent avoir un nom.
195
194
196
-
If a classexpressionhas a name, it's visible inside the class only:
195
+
Si une expression de classe a un nom, il est visible à l'intérieur de la classe uniquement:
197
196
198
197
```js run
199
-
// "Named Class Expression"
200
-
// (no such term in the spec, but that's similar to Named Function Expression)
198
+
// "Expression de Classe nommée"
199
+
// (Terme non existant dans la spécification, mais elle est similaire a une Expression de Fonction nommée)
201
200
let User = class *!*MyClass*/!* {
202
201
sayHi() {
203
-
alert(MyClass); // MyClass name is visible only inside the class
202
+
alert(MyClass); // le nom MyClass est seulement visible dans la classe
Here's an example with a computed property in brackets`[...]`:
284
+
Voici un exemple avec une propriété évaluée entre crochets`[...]`:
286
285
287
286
```js run
288
287
class User {
@@ -298,15 +297,15 @@ class User {
298
297
new User().sayHi();
299
298
```
300
299
301
-
For a generator method, similarly, prepend it with`*`.
300
+
Pour un générateur de méthode, similairement, il suffit de préposer un`*`.
302
301
303
-
## Class properties
302
+
## Proprietes de Classe
304
303
305
-
```warn header="Old browsers may need a polyfill"
306
-
Class-level properties are a recent addition to the language.
304
+
```warn header="les anciens navigateurs peuvent avoir besoin de polyfill"
305
+
Les propriétés au niveau Classe sont un ajout récent au langage.
307
306
```
308
307
309
-
In the example above, `User`only had methods. Let's add a property:
308
+
Dans l'exemple ci-dessus, `User` avait uniquement des méthodes. Maintenant, nous allons y ajouter une propriété:
310
309
311
310
```js run
312
311
class User {
@@ -322,30 +321,30 @@ class User {
322
321
new User().sayHi();
323
322
```
324
323
325
-
The property`name`is not placed into`User.prototype`. Instead, it is created by`new`before calling constructor, it's the property of the object itself.
324
+
La propriété `name` n'est pas placée dans`User.prototype`. Au lieu de cela, elle est créée par`new`avant l'appel du constructeur, c'est la propriété de l'objet lui-même.
326
325
327
-
## Summary
326
+
## Résumé
328
327
329
-
The basic class syntax looks like this:
328
+
La syntaxe de base d'une classe ressemble à ceci:
330
329
331
330
```js
332
331
class MyClass {
333
-
prop = value; //property
332
+
prop = value; // propriete
334
333
335
-
constructor(...) { //constructor
334
+
constructor(...) { // constructeur
336
335
// ...
337
336
}
338
337
339
-
method(...) {} //method
338
+
method(...) {} // methode
340
339
341
-
getsomething(...) {} //getter method
342
-
setsomething(...) {} //setter method
340
+
get something(...) {} // méthode définie avec un accesseur
341
+
set something(...) {} // méthode définie avec un mutateur
343
342
344
-
[Symbol.iterator]() {} //method with computed name (symbol here)
343
+
[Symbol.iterator]() {} // méthode avec un nom évalué (symbole ici)
345
344
// ...
346
345
}
347
346
```
348
347
349
-
`MyClass`is technically a function (the one that we provide as `constructor`), while methods, getters and settors are written to`MyClass.prototype`.
348
+
`MyClass`est techniquement une fonction (celle que nous donnons comme `constructor`), tandis que les méthodes, accesseurs et mutateurs sont écrits dans`MyClass.prototype`.
350
349
351
-
In the next chapters we'll learn more about classes, including inheritance and other features.
350
+
Dans les prochains chapitres nous apprendrons plus à propos des classes, y compris la notion d'héritage et les autres caractéristiques.
0 commit comments