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/03-static-properties-methods/article.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@
3
3
4
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*.
5
5
6
-
Dans une classe, elles sont précédées du mot clé `static`, comme ceci:
6
+
Dans une classe, elles sont précédées du mot clé `static`, comme ceci:
7
7
8
8
```js run
9
9
classUser {
@@ -17,7 +17,7 @@ class User {
17
17
User.staticMethod(); // true
18
18
```
19
19
20
-
Cela revient en fait à l'affecter directement à une propriété:
20
+
Cela revient en fait à l'affecter directement à une propriété:
21
21
22
22
```js run
23
23
classUser { }
@@ -33,7 +33,7 @@ La valeur de `this` dans l'appel `User.staticMethod()` est le constructeur de la
33
33
34
34
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.
35
35
36
-
Par exemple, nous avons des objets `Article` et avons besoin d'une fonction pour les comparer.
36
+
Par exemple, nous avons des objets `Article` et avons besoin d'une fonction pour les comparer.
37
37
38
38
Une solution naturelle serait d’ajouter la méthode `Article.compare`, comme ceci :
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.
69
69
70
-
Un autre exemple serait une méthode dite "d'usine".
70
+
Un autre exemple serait une méthode dite "d'usine".
71
71
72
72
Disons que nous avons besoin de plusieurs façons de créer un article :
73
73
74
-
1. Créez avec des paramètres donnés (`title`, `date` etc.).
74
+
1. Créez avec des paramètres donnés (`title`, `date`, etc.).
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.
103
103
104
-
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:
104
+
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:
105
105
106
106
```js
107
107
// en supposant que Article est une classe spéciale pour la gestion d'articles
108
-
// méthode statique pour supprimer l'article:
108
+
// méthode statique pour supprimer l'article:
109
109
Article.remove({id:12345});
110
110
```
111
111
@@ -116,15 +116,15 @@ Par exemple, ce genre de code ne fonctionnera pas :
116
116
117
117
```js
118
118
// ...
119
-
article.createTodays(); /// Error: article.createTodays is not a function
119
+
article.createTodays(); // Error: article.createTodays is not a function
120
120
```
121
121
````
122
122
123
123
## Propriétés statiques
124
124
125
125
[recent browser=Chrome]
126
126
127
-
Les propriétés statiques sont également possibles, elles ressemblent aux propriétés de classe ordinaires, mais précédées de `static`:
127
+
Les propriétés statiques sont également possibles, elles ressemblent aux propriétés de classe ordinaires, mais précédées de `static`:
128
128
129
129
```js run
130
130
classArticle {
@@ -134,7 +134,7 @@ class Article {
134
134
alert( Article.publisher ); // Ilya Kantor
135
135
```
136
136
137
-
C’est la même chose qu’une assignation directe à `Article`:
137
+
C’est la même chose qu’une assignation directe à `Article`:
Maintenant, lorsque nous appellerons `Rabbit.compare`, le `Animal.compare` hérité sera appelé.
193
193
194
-
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`.
194
+
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`.
195
195
196
196

197
197
198
-
Ainsi, `Rabbit extends Animal` crée deux références `[[Prototype]]`:
198
+
Ainsi, `Rabbit extends Animal` crée deux références `[[Prototype]]`:
199
199
200
200
1. La fonction `Rabbit` hérite de façon prototypique de la fonction `Animal`.
201
201
2.`Rabbit.prototype` hérite de façon prototypique de `Animal.prototype`.
202
202
203
203
En conséquence, l'héritage fonctionne à la fois pour les méthodes régulières et statiques.
204
204
205
-
Vérifions cela par code:
205
+
Vérifions cela par code:
206
206
207
207
```js run
208
208
classAnimal {}
@@ -225,7 +225,7 @@ Ils sont étiquetés par le mot `static` dans la déclaration de classe.
225
225
226
226
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.
227
227
228
-
La syntaxe est la suivante:
228
+
La syntaxe est la suivante:
229
229
230
230
```js
231
231
classMyClass {
@@ -237,7 +237,7 @@ class MyClass {
237
237
}
238
238
```
239
239
240
-
Techniquement, la déclaration statique revient à assigner à la classe elle-même:
240
+
Techniquement, la déclaration statique revient à assigner à la classe elle-même:
241
241
242
242
```js
243
243
MyClass.property=...
@@ -246,4 +246,4 @@ MyClass.method = ...
246
246
247
247
Les propriétés et méthodes statiques sont héritées.
248
248
249
-
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`.
249
+
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