Skip to content

Commit 11d8f7f

Browse files
authored
Merge pull request #79 from abdouse79/class
Class
2 parents 8c9cf58 + 6621b9e commit 11d8f7f

File tree

3 files changed

+98
-96
lines changed

3 files changed

+98
-96
lines changed
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
importance: 5
22

3+
34
---
45

5-
# Rewrite to class
6+
# Réécrire en classe
67

7-
The `Clock` class is written in functional style. Rewrite it the "class" syntax.
8+
La classe `Clock` est écrite en style fonctionnelle. Réécrivez la en syntaxe de "classe".
89

9-
P.S. The clock ticks in the console, open it to see.
10+
P.S. La montre doit tictaquer dans la console, ouvrez la pour la voir.

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

Lines changed: 91 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11

2-
# Class basic syntax
2+
# Syntaxe de base de la Classe
33

44
```quote author="Wikipedia"
5-
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).
66
```
77

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.
99

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.
1111

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.
1313

14-
## The "class" syntax
14+
## La syntaxe de "classe"
1515

16-
The basic syntax is:
16+
La syntaxe de base est:
1717
```js
1818
class MyClass {
19-
// class methods
19+
// Les méthodes de la classe
2020
constructor() { ... }
2121
method1() { ... }
2222
method2() { ... }
@@ -25,11 +25,11 @@ class MyClass {
2525
}
2626
```
2727

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.
2929

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.
3131

32-
For example:
32+
Par exemple:
3333

3434
```js run
3535
class User {
@@ -49,88 +49,87 @@ let user = new User("John");
4949
user.sayHi();
5050
```
5151

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.
5555

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()`.
5757

5858

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.
6161
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.
6363
```
6464

65-
## What is a class?
65+
## Qu'est-ce qu'une classe?
6666

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.
6868

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.
7070

71-
In JavaScript, a class is a kind of a function.
71+
En JavaScript, une classe est une sorte de fonction.
7272

73-
Here, take a look:
73+
Regardons ici:
7474

7575
```js run
7676
class User {
7777
constructor(name) { this.name = name; }
7878
sayHi() { alert(this.name); }
7979
}
8080

81-
// proof: User is a function
81+
// La preuve: User est une fonction
8282
*!*
8383
alert(typeof User); // function
8484
*/!*
8585
```
8686

87-
What `class User {...}` construct really does is:
87+
Ce que `class User {...}` la construction fait en réalité est de:
8888

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`.
9191

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.
9593

94+
Nous pouvons illustrer le résultat de la déclaration de `class User` ainsi:
9695
![](class-user.svg)
9796

98-
Here's the code to introspect it:
97+
Voici le code pour une introspection:
9998

10099
```js run
101100
class User {
102101
constructor(name) { this.name = name; }
103102
sayHi() { alert(this.name); }
104103
}
105104

106-
// class is a function
105+
// classe est une function
107106
alert(typeof User); // function
108107

109-
// ...or, more precisely, the constructor method
108+
// ...ou, plus précisément, le constructeur de la méthode
110109
alert(User === User.prototype.constructor); // true
111110

112-
// The methods are in User.prototype, e.g:
111+
// Les méthodes sont dans User.prototype, e.g:
113112
alert(User.prototype.sayHi); // alert(this.name);
114113

115-
// there are exactly two methods in the prototype
116-
alert(Object.getOwnPropertyNames(User.prototype)); // constructor, sayHi
114+
// Il y a exactement deux méthodes dans le prototype
115+
alert(Object.getOwnPropertyNames(User.prototype)); // constructeur, sayHi
117116
```
118117

119-
## Not just a syntax sugar
118+
## Pas simplement un sucre syntaxique
120119

121-
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`:
122121

123122
```js run
124-
// rewriting class User in pure functions
123+
// Réécriture de class User en fonctions pures
125124

126-
// 1. Create constructor function
125+
// 1. Créer la fonction constructeur
127126
function User(name) {
128127
this.name = name;
129128
}
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
132131

133-
// 2. Add the method to prototype
132+
// 2. Ajouter la méthode au prototype
134133
User.prototype.sayHi = function() {
135134
alert(this.name);
136135
};
@@ -140,24 +139,24 @@ let user = new User("John");
140139
user.sayHi();
141140
```
142141

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.
144143

145-
Although, there are important differences.
144+
Bien qu’il y ait des différences importantes.
146145

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.
148147

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`:
150149

151150
```js run
152151
class User {
153152
constructor() {}
154153
}
155154

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'
158157
```
159158

160-
Also, a string representation of a class constructor in 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..."
161160
162161
```js run
163162
class User {
@@ -167,21 +166,21 @@ Although, there are important differences.
167166
alert(User); // class User { ... }
168167
```
169168
170-
2. Class methods are non-enumerable.
171-
A class definition 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"`.
172171
173-
That's good, because if we `for..in` over an object, we usually don't want its class methods.
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.
174173

175-
3. Classes always `use strict`.
176-
All code inside the class construct 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.
177176
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.
179178

180-
## Class Expression
179+
## L'Expression Class
181180
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.
183182
184-
Here's an example of a class expression:
183+
Voici un exemple d'expression d'une classe:
185184
186185
```js
187186
let User = class {
@@ -191,55 +190,55 @@ let User = class {
191190
};
192191
```
193192
194-
Similar to Named Function Expressions, class expressions may have a name.
193+
Similairement aux Fonction Expressions nommées, les expressions de classe peuvent avoir un nom.
195194
196-
If a class expression has 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:
197196

198197
```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)
201200
let User = class *!*MyClass*/!* {
202201
sayHi() {
203-
alert(MyClass); // MyClass name is visible only inside the class
202+
alert(MyClass); // le nom MyClass est seulement visible dans la classe
204203
}
205204
};
206205
207-
new User().sayHi(); // works, shows MyClass definition
206+
new User().sayHi(); // ça fonctionne, montre la définition de MyClass
208207
209-
alert(MyClass); // error, MyClass name isn't visible outside of the class
208+
alert(MyClass); // erreur, le nom MyClass n'est pas visible en dehors de la classe
210209
```
211210

212211

213-
We can even make classes dynamically "on-demand", like this:
212+
Nous pouvons même créer les classes dynamiquement "a la demande", comme ainsi:
214213

215214
```js run
216215
function makeClass(phrase) {
217-
// declare a class and return it
216+
// déclare une classe et la retourne
218217
return class {
219218
sayHi() {
220219
alert(phrase);
221220
};
222221
};
223222
}
224223
225-
// Create a new class
224+
// Cree une nouvelle classe
226225
let User = makeClass("Hello");
227226
228227
new User().sayHi(); // Hello
229228
```
230229

231230

232-
## Getters/setters, other shorthands
231+
## Accesseurs/Mutateurs, autres syntaxes de raccourcis
233232

234-
Just like literal objects, classes may include getters/setters, generators, computed properties etc.
233+
Tout comme les objets littéraux, les classes peuvent inclure des accesseurs/mutateurs, des générateurs, des propriétés évaluées etc.
235234

236-
Here's an example for `user.name` implemented using `get/set`:
235+
Voici un exemple pour `user.name` implémente en utilisant les propriétés `get/set`:
237236

238237
```js run
239238
class User {
240239
241240
constructor(name) {
242-
// invokes the setter
241+
// invoque l'accesseur (the setter)
243242
this.name = name;
244243
}
245244
@@ -264,10 +263,10 @@ class User {
264263
let user = new User("John");
265264
alert(user.name); // John
266265
267-
user = new User(""); // Name too short.
266+
user = new User(""); // le nom est trop court.
268267
```
269268

270-
The class declaration creates getters and setters in `User.prototype`, like this:
269+
La déclaration de la classe Cree des accesseurs et des mutateurs dans `User.prototype`, ainsi:
271270

272271
```js
273272
Object.defineProperties(User.prototype, {
@@ -282,7 +281,7 @@ Object.defineProperties(User.prototype, {
282281
});
283282
```
284283

285-
Here's an example with a computed property in brackets `[...]`:
284+
Voici un exemple avec une propriété évaluée entre crochets `[...]`:
286285

287286
```js run
288287
class User {
@@ -298,15 +297,15 @@ class User {
298297
new User().sayHi();
299298
```
300299

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 `*`.
302301

303-
## Class properties
302+
## Proprietes de Classe
304303

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.
307306
```
308307

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é:
310309
311310
```js run
312311
class User {
@@ -322,30 +321,30 @@ class User {
322321
new User().sayHi();
323322
```
324323
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.
326325
327-
## Summary
326+
## Résumé
328327
329-
The basic class syntax looks like this:
328+
La syntaxe de base d'une classe ressemble à ceci:
330329

331330
```js
332331
class MyClass {
333-
prop = value; // property
332+
prop = value; // propriete
334333
335-
constructor(...) { // constructor
334+
constructor(...) { // constructeur
336335
// ...
337336
}
338337
339-
method(...) {} // method
338+
method(...) {} // methode
340339
341-
get something(...) {} // getter method
342-
set something(...) {} // setter method
340+
get something(...) {} // méthode définie avec un accesseur
341+
set something(...) {} // méthode définie avec un mutateur
343342
344-
[Symbol.iterator]() {} // method with computed name (symbol here)
343+
[Symbol.iterator]() {} // méthode avec un nom évalué (symbole ici)
345344
// ...
346345
}
347346
```
348347

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`.
350349

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

Comments
 (0)