|
9 | 9 |
|
10 | 10 | Зачастую у нас есть переменные, например, `name` и `isAdmin`, и мы хотим использовать их в объекте. |
11 | 11 |
|
12 | | -При объявлении объекта в этом случае достаточно указать только имя свойства, а значение будет взято из переменной с таким именем. |
| 12 | +При объявлении объекта в этом случае достаточно указать только имя свойства, а значение будет взято из переменной с аналогичным именем. |
13 | 13 |
|
14 | 14 | Например: |
15 | 15 |
|
@@ -81,7 +81,7 @@ alert( user["мой зелёный крокодил"] ); // Вася |
81 | 81 | <li>`Object.setPrototypeOf(obj, newProto)`</li> |
82 | 82 | </ul> |
83 | 83 |
|
84 | | -...А также "узаконено" свойство `__proto__`, которое даёт прямой доступ к прототипу. Его, в качестве "нестандартного", но удобного способа работы с прототипом реализовали почти все браузеры (кроме IE10-), так что было принято решение добавить его в стандарт. |
| 84 | +...А также "узаконено" свойство `__proto__`, которое даёт прямой доступ к прототипу. Его, в качестве "нестандартного", но удобного способа работы с прототипом, реализовали почти все браузеры (кроме IE10-), так что было принято решение добавить его в стандарт. |
85 | 85 |
|
86 | 86 | ## Object.assign |
87 | 87 |
|
@@ -151,7 +151,7 @@ alert( NaN === NaN ); // false |
151 | 151 |
|
152 | 152 | Долгое время в JavaScript термин "метод объекта" был просто альтернативным названием для свойства-функции. |
153 | 153 |
|
154 | | -Теперь это уже не так, добавлены именно "методы объекта", которые, по сути, являются свойствами-функциями, привязанными к объекту. |
| 154 | +Теперь это уже не так. Добавлены именно "методы объекта", которые, по сути, являются свойствами-функциями, привязанными к объекту. |
155 | 155 |
|
156 | 156 | Их особенности: |
157 | 157 |
|
@@ -256,7 +256,7 @@ let rabbit = { |
256 | 256 | rabbit.walk(); |
257 | 257 | ``` |
258 | 258 |
|
259 | | -Как правило, это используется в [классах](/class), которые мы рассмотрим в следующем разделе, но важно понимать, что "классы" здесь на самом деле не при чём. Свойство `super` работает через прототип, на уровне методов объекта. |
| 259 | +Как правило, это используется в [классах](/es-class), которые мы рассмотрим в следующем разделе, но важно понимать, что "классы" здесь на самом деле ни при чём. Свойство `super` работает через прототип, на уровне методов объекта. |
260 | 260 |
|
261 | 261 | При обращении через `super` используется `[[HomeObject]]` текущего метода, и от него берётся `__proto__`. Поэтому `super` работает только внутри методов. |
262 | 262 |
|
@@ -284,7 +284,7 @@ let rabbit = { |
284 | 284 | rabbit.walk(); |
285 | 285 | ``` |
286 | 286 |
|
287 | | -Ошибка возникнет, так как `rabbit.walk` теперь обычная функция, и не имеет `[[HomeObject]]`. В ней не работает `super`. |
| 287 | +Ошибка возникнет, так как `rabbit.walk` теперь обычная функция и не имеет `[[HomeObject]]`. Поэтому в ней не работает `super`. |
288 | 288 |
|
289 | 289 | Исключением из этого правила являются функции-стрелки. В них используется `super` внешней функции. Например, здесь функция-стрелка в `setTimeout` берёт внешний `super`: |
290 | 290 |
|
@@ -339,7 +339,7 @@ walk(); // вызовет animal.walk() |
339 | 339 | */!* |
340 | 340 | ``` |
341 | 341 |
|
342 | | -В примере выше метод `walk()` запускается отдельно от объекта, но всё равно сохраняется через `super` доступ к его прототипу, благодаря `[[HomeObject]]`. |
| 342 | +В примере выше метод `walk()` запускается отдельно от объекта, но всё равно, благодаря `[[HomeObject]]`, сохраняется доступ к его прототипу через `super`. |
343 | 343 |
|
344 | 344 | Это -- скорее технический момент, так как методы объекта, всё же, предназначены для вызова в контексте этого объекта. В частности, правила для `this` в методах -- те же, что и для обычных функций. В примере выше при вызове `walk()` без объекта `this` будет `undefined`. |
345 | 345 | [/smart] |
|
0 commit comments