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
Built-in classes like Array, Map and others are extendable also.
4
+
Les classes intégrées telles que Array, Map et autres sont également extensibles.
5
5
6
-
For instance, here`PowerArray`inherits from the native `Array`:
6
+
Par exemple, ici,`PowerArray`hérite du `Array` natif:
7
7
8
8
```js run
9
-
//add one more method to it (can do more)
9
+
//ajoutez-y une méthode supplémentaire
10
10
classPowerArrayextendsArray {
11
11
isEmpty() {
12
12
returnthis.length===0;
@@ -21,20 +21,20 @@ alert(filteredArr); // 10, 50
21
21
alert(filteredArr.isEmpty()); // false
22
22
```
23
23
24
-
Please note a very interesting thing. Built-in methods like `filter`, `map`and others -- return new objects of exactly the inherited type `PowerArray`. Their internal implementation uses object `constructor`property for that.
24
+
Noter une chose très intéressante. Les méthodes intégrées telles que `filter`, `map`et autres renvoient des nouveaux objets exactement du type hérité `PowerArray`. Leur implémentation interne utilise la propriété d'objet `constructor`pour cela.
25
25
26
-
In the example above,
26
+
Dans l'exemple ci-dessus,
27
27
```js
28
28
arr.constructor=== PowerArray
29
29
```
30
30
31
-
When`arr.filter()`is called, it internally creates the new array of results using exactly `arr.constructor`, not basic `Array`. That's actually very cool, because we can keep using `PowerArray`methods further on the result.
31
+
Lorsque`arr.filter()`est appelé, elle crée en interne le nouveau tableau de résultats en utilisant exactement `arr.constructor`, et non pas `Array`. C'est en fait très intéressant, car nous pouvons continuer à utiliser les méthodes `PowerArray`sur le résultat.
32
32
33
-
Even more, we can customize that behavior.
33
+
Encore plus, nous pouvons personnaliser ce comportement.
34
34
35
-
We can add a special static getter`Symbol.species`to the class. If exists, it should return the constructor that JavaScript will use internally to create new entities in `map`, `filter` and so on.
35
+
Nous pouvons ajouter un accésseur statique spécial`Symbol.species`à la classe. S'il existe, il devrait renvoyer le constructeur que JavaScript utilisera en interne pour créer de nouvelles entités dans `map`, `filter`, etc.
36
36
37
-
If we'd like built-in methods like `map`or`filter`to return regular arrays, we can return`Array`in`Symbol.species`, like here:
37
+
Si nous souhaitons que des méthodes intégrées comme `map`ou`filter`renvoient des tableaux classiques, nous pouvons retourner`Array`dans`Symbol.species`, comme ici:
38
38
39
39
```js run
40
40
classPowerArrayextendsArray {
@@ -43,7 +43,7 @@ class PowerArray extends Array {
43
43
}
44
44
45
45
*!*
46
-
//built-in methods will use this as the constructor
46
+
//les méthodes intégrées l'utiliseront comme constructeur
47
47
staticget [Symbol.species]() {
48
48
returnArray;
49
49
}
@@ -53,37 +53,37 @@ class PowerArray extends Array {
53
53
let arr =newPowerArray(1, 2, 5, 10, 50);
54
54
alert(arr.isEmpty()); // false
55
55
56
-
// filter creates new array using arr.constructor[Symbol.species] as constructor
56
+
// filter crée un nouveau tableau en utilisant arr.constructor[Symbol.species] comme constructeur
57
57
let filteredArr =arr.filter(item=> item >=10);
58
58
59
59
*!*
60
-
// filteredArr is not PowerArray, but Array
60
+
// filteredArr n'est pas PowerArray, mais Array
61
61
*/!*
62
62
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
63
63
```
64
64
65
-
As you can see, now`.filter`returns`Array`. So the extended functionality is not passed any further.
65
+
Comme vous pouvez le constater, maintenant,`.filter`renvoie`Array`. La fonctionnalité étendue n'est donc plus transmise.
66
66
67
-
```smart header="Other collections work similarly"
68
-
Other collections, such as `Map` and `Set`, work alike. They also use `Symbol.species`.
67
+
```smart header="D'autres collections fonctionnent de la même manière"
68
+
D'autres collections, telles que `Map` et `Set`, fonctionnent de la même manière. Ils utilisent également `Symbol.species`.
69
69
```
70
70
71
-
## No static inheritance in built-ins
71
+
## Pas d'héritage statique dans les éléments intégrés
72
72
73
-
Built-in objects have their own static methods, for instance`Object.keys`,`Array.isArray` etc.
73
+
Les objets intégrés ont leurs propres méthodes statiques, par exemple`Object.keys`,`Array.isArray` etc.
74
74
75
-
As we already know, native classes extend each other. For instance, `Array` extends `Object`.
75
+
Comme nous le savons déjà, les classes natives s'étendent les uns des autres. Par exemple, `Array` extends `Object`.
76
76
77
-
Normally, when one class extends another, both static and non-static methods are inherited. That was thoroughly explained in the chapter[](info:static-properties-methods#statics-and-inheritance).
77
+
Normalement, lorsqu'une classe en étend une autre, les méthodes statiques et non statiques sont héritées. Cela a été expliqué en détail dans le chapitre[](info:static-properties-methods#statics-and-inheritance).
78
78
79
-
But built-in classes are an exception. They don't inherit statics from each other.
79
+
Mais les classes intégrées sont une exception. Ils n'héritent pas les méthodes statiques les uns des autres.
80
80
81
-
For example, both `Array`and`Date`inherit from`Object`, so their instances have methods from `Object.prototype`. But`Array.[[Prototype]]`does not reference `Object`, so there's no `Array.keys()`and`Date.keys()` static methods.
81
+
Par exemple, `Array`et`Date`héritent de`Object`, de sorte que leurs instances ont des méthodes issues de `Object.prototype`. Mais`Array.[[Prototype]]`ne fait pas référence à `Object`, il n'y a donc pas de méthodes statiques `Array.keys()`et`Date.keys()`.
82
82
83
-
Here's the picture structure for `Date`and`Object`:
83
+
Voici la structure d'image pour `Date`et`Object`:
84
84
85
85

86
86
87
-
As you can see, there's no link between `Date`and`Object`. They are independent, only`Date.prototype`inherits from`Object.prototype`.
87
+
Comme vous pouvez le constater, il n'y a pas de lien entre `Date`et`Object`. Ils sont indépendants, seul`Date.prototype`hérite de`Object.prototype`.
88
88
89
-
That's an important difference of inheritance between built-in objects compared to what we get with`extends`.
89
+
C'est une différence d'héritage importante entre les objets intégrés par rapport à ce que nous obtenons avec`extends`.
0 commit comments