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/05-extend-natives/article.md
+9-10Lines changed: 9 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,6 @@
3
3
4
4
Базовые классы, такие как Array, Map и другие могу быть также расширены.
5
5
6
-
For instance, here `PowerArray` inherits from the native `Array`:
7
6
Например, в этом примере `PowerArray` наследуется от встроенного `Array`:
8
7
9
8
```js run
@@ -22,7 +21,7 @@ alert(filteredArr); // 10, 50
22
21
alert(filteredArr.isEmpty()); // false
23
22
```
24
23
25
-
Обратите внимание на интересную вещь: встроенные методы, такие как `filter`, `map` и другие возвращают новые объекты созданного пользовательского типа. Для этого они используют свойство `constructor`.
24
+
Обратите внимание на интересный момент: встроенные методы, такие как `filter`, `map` и другие возвращают новые объекты созданного пользовательского типа. Для этого они используют свойство `constructor`.
26
25
27
26
В примере выше,
28
27
```js
@@ -34,7 +33,7 @@ arr.constructor === PowerArray
34
33
35
34
Даже более, мы можем изменить поведение.
36
35
37
-
Специальный статичный геттер `Symbol.species`, если существует, возвращает конструктор, который можно использовать в таких случаях.
36
+
Специальный статический геттер `Symbol.species`, если существует, возвращает конструктор, который можно использовать в таких случаях.
38
37
39
38
Если мы решим возвращать обычный массив из встроенных методов, таких как `map`, `filter` и т. д., мы можем вернуть `Array` из `Symbol.species`, как в этом примере:
40
39
@@ -45,7 +44,7 @@ class PowerArray extends Array {
45
44
}
46
45
47
46
*!*
48
-
// встроенные методы будут использовать этот метот как конструктор
47
+
// встроенные методы будут использовать этот метод как конструктор
49
48
staticget [Symbol.species]() {
50
49
returnArray;
51
50
}
@@ -55,7 +54,7 @@ class PowerArray extends Array {
55
54
let arr =newPowerArray(1, 2, 5, 10, 50);
56
55
alert(arr.isEmpty()); // false
57
56
58
-
// filter создаст новый массив используя arr.constructor[Symbol.species] как конструктор
57
+
// filter создаст новый массив, используя arr.constructor[Symbol.species] как конструктор
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
65
64
```
66
65
67
-
Как вы видите, теперь `.filter` возвращает `Array`. Расширенный функционал не будет передаваться далее.
66
+
Как вы видите, теперь `.filter` возвращает `Array`. Расширенная функциональность не будет передаваться далее.
68
67
69
-
## Отсутствие статичного наследования встроенных классов
68
+
## Отсутствие статического наследования встроенных классов
70
69
71
-
У встроенных объектов есть собственные статичные методы, например `Object.keys`, `Array.isArray` и т. д.
70
+
У встроенных объектов есть собственные статические методы, например `Object.keys`, `Array.isArray` и т. д.
72
71
73
72
Мы уже говорили ранее о встроенных классах, которые расширяют друг друга: `Array.[[Prototype]] = Object`.
74
73
75
-
Но статичные методы - исключение. Встроенные классы не наследуют статичные методы друг друга.
74
+
Но статические методы - исключение. Встроенные классы не наследуют статические методы друг друга.
76
75
77
76
Другими словами, прототип встроенного конструктора `Array` не содержит указателя на `Object`. Таким образом, `Array` и `Date` не содержат `Array.keys` или `Date.keys`. И это выглядит естественно.
78
77
79
78
Ниже вы видите структуру `Date` и `Object`:
80
79
81
80

82
81
83
-
Заметьте, здесь нет связи между `Date` и `Object`.`Object`и `Date` существуют независимо. `Date.prototype` наследуется от `Object.prototype`, и только.
82
+
Следует отметить, что здесь нет связи между `Date` и `Object`. Как `Object`, так и `Date` существуют независимо. `Date.prototype` наследуется только от `Object.prototype`.
0 commit comments