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
+
Las clases integradas como Array, Map y otras también son extensibles.
5
5
6
-
For instance, here`PowerArray`inherits from the native`Array`:
6
+
Por ejemplo, aquí`PowerArray`hereda del nativo`Array`:
7
7
8
8
```js run
9
-
//add one more method to it (can do more)
9
+
//se agrega un método más (puedes hacer más)
10
10
classPowerArrayextendsArray {
11
11
isEmpty() {
12
12
returnthis.length===0;
13
13
}
14
14
}
15
15
16
16
let arr =newPowerArray(1, 2, 5, 10, 50);
17
-
alert(arr.isEmpty()); //false
17
+
alert(arr.isEmpty()); //falso
18
18
19
19
let filteredArr =arr.filter(item=> item >=10);
20
20
alert(filteredArr); // 10, 50
21
-
alert(filteredArr.isEmpty()); //false
21
+
alert(filteredArr.isEmpty()); //falso
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 the object's`constructor`property for that.
24
+
Tenga en cuenta una cosa muy interesante. Métodos incorporados como`filter`, `map`y otros: devuelven nuevos objetos exactamente del tipo heredado `PowerArray`. Su implementación interna utiliza la propiedad`constructor`del objeto para eso.
25
25
26
-
In the example above,
26
+
En el ejemplo anterior,
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
+
Cuando se llama a `arr.filter()`, crea internamente la nueva matriz de resultados usando exactamente `arr.constructor`, no el básico `Array`. En realidad, eso es muy bueno, porque podemos seguir usando métodos`PowerArray`más adelante en el resultado.
32
32
33
-
Even more, we can customize that behavior.
33
+
Aún más, podemos personalizar ese comportamiento.
34
34
35
-
We can add a special static getter `Symbol.species`to the class. If it exists, it should return the constructor that JavaScript will use internally to create new entities in `map`, `filter`and so on.
35
+
Podemos agregar un `getter` estático especial `Symbol.species`a la clase. Si existe, debería devolver el constructor que JavaScript usará internamente para crear nuevas entidades en `map`, `filter`y así sucesivamente.
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 queremos que los métodos incorporados como `map`o`filter`devuelvan matrices regulares, podemos devolver `Array`en`Symbol.species`, como aquí:
38
38
39
39
```js run
40
40
classPowerArrayextendsArray {
@@ -43,47 +43,47 @@ class PowerArray extends Array {
43
43
}
44
44
45
45
*!*
46
-
//built-in methods will use this as the constructor
46
+
//los métodos incorporados usarán esto como el constructor
47
47
staticget [Symbol.species]() {
48
48
returnArray;
49
49
}
50
50
*/!*
51
51
}
52
52
53
53
let arr =newPowerArray(1, 2, 5, 10, 50);
54
-
alert(arr.isEmpty()); //false
54
+
alert(arr.isEmpty()); //falso
55
55
56
-
// filter creates new array using arr.constructor[Symbol.species] as constructor
56
+
// filter crea una nueva matriz usando arr.constructor[Symbol.species] como constructor
57
57
let filteredArr =arr.filter(item=> item >=10);
58
58
59
59
*!*
60
-
//filteredArr is not PowerArray, but Array
60
+
//filterArr no es PowerArray, sino Array
61
61
*/!*
62
-
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
62
+
alert(filteredArr.isEmpty()); // Error: filterArr.isEmpty no es una función
63
63
```
64
64
65
-
As you can see, now`.filter`returns`Array`. So the extended functionality is not passed any further.
65
+
Como puede ver, ahora`.filter`devuelve`Array`. Por lo tanto, la funcionalidad extendida ya no se pasa.
66
66
67
-
```smart header="Other collections work similarly"
68
-
Other collections, such as `Map` and `Set`, work alike. They also use `Symbol.species`.
Otras colecciones, como `Map` y `Set`, funcionan igual. También usan `Symbol.species`.
69
69
```
70
70
71
-
## No static inheritance in built-ins
71
+
## Sin herencia estática en incorporados
72
72
73
-
Built-in objects have their own static methods, for instance`Object.keys`, `Array.isArray` etc.
73
+
Los objetos incorporados tienen sus propios métodos estáticos, por ejemplo,`Object.keys`, `Array.isArray`, etc.
74
74
75
-
As we already know, native classes extend each other. For instance, `Array`extends`Object`.
75
+
Como ya sabemos, las clases nativas se extienden entre sí. Por ejemplo, `Array`extiende`Object`.
76
76
77
-
Normally, when one class extends another, both static and non-static methods are inherited. That was thoroughly explained in the article[](info:static-properties-methods#statics-and-inheritance).
77
+
Normalmente, cuando una clase extiende a otra, se heredan los métodos estáticos y no estáticos. Eso se explicó a fondo en el artículo[](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
+
Pero las clases integradas son una excepción. No heredan estáticos el uno del otro.
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, for instance, `Array.keys()` (or`Date.keys()`) static method.
81
+
Por ejemplo, tanto`Array`como`Date`heredan de`Object`, por lo que sus instancias tienen métodos de `Object.prototype`. Pero`Array.[[Prototype]]`no hace referencia a `Object`, por lo que no existe, por ejemplo, el método estático `Array.keys()` (o`Date.keys()`).
82
82
83
-
Here's the picture structure for `Date`and`Object`:
83
+
Aquí está la imagen, estructura para `Date`y`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
+
Como puede ver, no hay un vínculo entre `Date`y`Object`. Son independientes, solo`Date.prototype`hereda 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
+
Esa es una diferencia importante de herencia entre los objetos integrados en comparación con lo que obtenemos con 'extends`.
0 commit comments