Skip to content

Commit 81de05b

Browse files
authored
Merge pull request #76 from TevaHenry/master
Static properties and methods
2 parents 416bd4c + fdb6fa8 commit 81de05b

File tree

1 file changed

+45
-45
lines changed
  • 1-js/09-classes/03-static-properties-methods

1 file changed

+45
-45
lines changed

1-js/09-classes/03-static-properties-methods/article.md

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11

2-
# Static properties and methods
2+
# Propriétés et méthodes statiques
33

4-
We can also assign a method to the class function itself, not to its `"prototype"`. Such methods are called *static*.
4+
Nous pouvons aussi assigner une méthode à la fonction de classe elle-même, pas à son `"prototype"`. De telles méthodes sont appelées *statique*.
55

6-
In a class, they are prepended by `static` keyword, like this:
6+
Dans une classe, ils sont précédés du mot clé `static`, comme ceci:
77

88
```js run
99
class User {
@@ -17,7 +17,7 @@ class User {
1717
User.staticMethod(); // true
1818
```
1919

20-
That actually does the same as assigning it as a property directly:
20+
Cela revient en fait à l'affecter directement à une propriété:
2121

2222
```js
2323
class User() { }
@@ -27,11 +27,11 @@ User.staticMethod = function() {
2727
};
2828
```
2929

30-
The value of `this` in `User.staticMethod()` call is the class constructor `User` itself (the "object before dot" rule).
30+
La valeur de `this` dans l'appel `User.staticMethod()` est le constructeur de la classe `User` lui-même (la règle "objet avant le point").
3131

32-
Usually, static methods are used to implement functions that belong to the class, but not to any particular object of it.
32+
Généralement, les méthodes statiques sont utilisées pour implémenter des fonctions appartenant à la classe, mais pas à un objet particulier de celle-ci.
3333

34-
For instance, we have `Article` objects and need a function to compare them. A natural solution would be to add `Article.compare` method, like this:
34+
Par exemple, nous avons des objets `Article` et avons besoin d'une fonction pour les comparer. Une solution naturelle serait d’ajouter la méthode `Article.compare`, comme ceci:
3535

3636
```js run
3737
class Article {
@@ -61,17 +61,17 @@ articles.sort(Article.compare);
6161
alert( articles[0].title ); // CSS
6262
```
6363

64-
Here `Article.compare` stands "above" articles, as a means to compare them. It's not a method of an article, but rather of the whole class.
64+
Ici, `Article.compare` est "au dessus" des articles, comme un moyen de les comparer. Ce n'est pas une méthode d'article, mais plutôt de toute la classe.
6565

66-
Another example would be a so-called "factory" method. Imagine, we need few ways to create an article:
66+
Un autre exemple serait une méthode dite "d'usine". Imaginez, nous avons besoin de peu de façons de créer un article:
6767

68-
1. Create by given parameters (`title`, `date` etc).
69-
2. Create an empty article with today's date.
70-
3. ...or else somehow.
68+
1. Créez avec des paramètres donnés (`title`, `date` etc.).
69+
2. Créez un article vide avec la date du jour.
70+
3. ... ou d'une certaine manière.
7171

72-
The first way can be implemented by the constructor. And for the second one we can make a static method of the class.
72+
Le premier moyen peut être implémenté par le constructeur. Et pour le second, nous pouvons créer une méthode statique de la classe.
7373

74-
Like `Article.createTodays()` here:
74+
Comme `Article.createTodays()` ici:
7575

7676
```js run
7777
class Article {
@@ -82,7 +82,7 @@ class Article {
8282

8383
*!*
8484
static createTodays() {
85-
// remember, this = Article
85+
// rappelez vous, this = Article
8686
return new this("Today's digest", new Date());
8787
}
8888
*/!*
@@ -93,21 +93,21 @@ let article = Article.createTodays();
9393
alert( article.title ); // Todays digest
9494
```
9595

96-
Now every time we need to create a today's digest, we can call `Article.createTodays()`. Once again, that's not a method of an article, but a method of the whole class.
96+
Maintenant, chaque fois que nous avons besoin de créer le résumé d'aujourd'hui, nous pouvons appeler `Article.createTodays()`. Encore une fois, ce n'est pas une méthode d'article, mais une méthode de toute la classe.
9797

98-
Static methods are also used in database-related classes to search/save/remove entries from the database, like this:
98+
Les méthodes statiques sont également utilisées dans les classes liées à la base de données pour rechercher/enregistrer/supprimer des entrées dans la base de données, comme ceci:
9999

100100
```js
101-
// assuming Article is a special class for managing articles
102-
// static method to remove the article:
101+
// en supposant que Article est une classe spéciale pour la gestion d'articles
102+
// méthode statique pour supprimer l'article:
103103
Article.remove({id: 12345});
104104
```
105105

106-
## Static properties
106+
## Propriétés statiques
107107

108108
[recent browser=Chrome]
109109

110-
Static properties are also possible, they look like regular class properties, but prepended by `static`:
110+
Les propriétés statiques sont également possibles, elles ressemblent aux propriétés de classe ordinaires, mais précédées de `static`:
111111

112112
```js run
113113
class Article {
@@ -117,17 +117,17 @@ class Article {
117117
alert( Article.publisher ); // Ilya Kantor
118118
```
119119

120-
That is the same as a direct assignment to `Article`:
120+
C’est la même chose qu’une assignation directe à `Article`:
121121

122122
```js
123123
Article.publisher = "Ilya Kantor";
124124
```
125125

126-
## Inheritance of static methods
126+
## Héritage de méthodes statiques
127127

128-
Static methods are inherited.
128+
Les méthodes statiques sont héritées.
129129

130-
For instance, `Animal.compare` in the code below is inherited and accessible as `Rabbit.compare`:
130+
Par exemple, `Animal.compare` dans le code ci-dessous est héritée et accessible par `Rabbit.compare`:
131131

132132
```js run
133133
class Animal {
@@ -150,7 +150,7 @@ class Animal {
150150

151151
}
152152

153-
// Inherit from Animal
153+
// Hérite de Animal
154154
class Rabbit extends Animal {
155155
hide() {
156156
alert(`${this.name} hides!`);
@@ -166,46 +166,46 @@ let rabbits = [
166166
rabbits.sort(Rabbit.compare);
167167
*/!*
168168

169-
rabbits[0].run(); // Black Rabbit runs with speed 5.
169+
rabbits[0].run(); // Black Rabbit court à la vitesse 5.
170170
```
171171

172-
Now when we can call `Rabbit.compare`, the inherited `Animal.compare` will be called.
172+
Maintenant, lorsque nous appellerons `Rabbit.compare`, le `Animal.compare` hérité sera appelé.
173173

174-
How does it work? Again, using prototypes. As you might have already guessed, `extends` gives `Rabbit` the `[[Prototype]]` reference to `Animal`.
174+
Comment cela fonctionne t-il? Encore une fois, en utilisant des prototypes. Comme vous l'avez peut-être déjà deviné, `extends` donne à `Rabbit` la référence de `[[Prototype]]` à `Animal`.
175175

176176
![](animal-rabbit-static.svg)
177177

178-
So, `Rabbit extends Animal` creates two `[[Prototype]]` references:
178+
Ainsi, `Rabbit extends Animal` crée deux références `[[Prototype]]`:
179179

180-
1. `Rabbit` function prototypally inherits from `Animal` function.
181-
2. `Rabbit.prototype` prototypally inherits from `Animal.prototype`.
180+
1. La fonction `Rabbit` hérite de façon prototypique de la fonction `Animal`.
181+
2. `Rabbit.prototype` hérite de façon prototypique de `Animal.prototype`.
182182

183-
As the result, inheritance works both for regular and static methods.
183+
En conséquence, l'héritage fonctionne à la fois pour les méthodes régulières et statiques.
184184

185-
Here, let's check that by code:
185+
Vérifions cela par code:
186186

187187
```js run
188188
class Animal {}
189189
class Rabbit extends Animal {}
190190

191-
// for statics
191+
// pour les méthodes statiques
192192
alert(Rabbit.__proto__ === Animal); // true
193193

194-
// for regular methods
194+
// pour les méthodes régulières
195195
alert(Rabbit.prototype.__proto__ === Animal.prototype);
196196
```
197197

198-
## Summary
198+
## Résumé
199199

200-
Static methods are used for the functionality that belongs to the class "as a whole", doesn't relate to a concrete class instance.
200+
Les méthodes statiques sont utilisées pour les fonctionnalités appartenant à la classe "dans son ensemble", sans rapport avec une instance de classe concrète.
201201

202-
For example, a method for comparison `Article.compare(article1, article2)` or a factory method `Article.createTodays()`.
202+
Par exemple, une méthode de comparaison `Article.compare(article1, article2)` ou une méthode d'usine `Article.createTodays()`.
203203

204-
They are labeled by the word `static` in class declaration.
204+
Ils sont étiquetés par le mot `static` dans la déclaration de classe.
205205

206-
Static properties are used when we'd like to store class-level data, also not bound to an instance.
206+
Les propriétés statiques sont utilisées lorsque nous souhaitons stocker des données au niveau de la classe, également non liées à une instance.
207207

208-
The syntax is:
208+
La syntaxe est la suivante:
209209

210210
```js
211211
class MyClass {
@@ -217,13 +217,13 @@ class MyClass {
217217
}
218218
```
219219

220-
Technically, static declaration is the same as assigning to the class itself:
220+
Techniquement, la déclaration statique revient à assigner à la classe elle-même:
221221

222222
```js
223223
MyClass.property = ...
224224
MyClass.method = ...
225225
```
226226

227-
Static properties and methods are inherited.
227+
Les propriétés et méthodes statiques sont héritées.
228228

229-
For `class B extends A` the prototype of the class `B` itself points to `A`: `B.[[Prototype]] = A`. So if a field is not found in `B`, the search continues in `A`.
229+
Pour `class B extends A`, le prototype de la classe `B` pointe lui-même à `A`: `B.[[Prototype]] = A`. Donc, si un champ n'est pas trouvé dans `B`, la recherche continue dans `A`.

0 commit comments

Comments
 (0)