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/06-advanced-functions/10-bind/article.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ libs:
11
11
12
12
## Потеря `this`
13
13
14
-
Мы уже знаем, что в JavaScript легко потерять `this`: когда метод передается где-то отдельно от объекта --`this` теряется.
14
+
Мы уже знаем, что в JavaScript легко потерять `this`: когда метод передается где-то отдельно от объекта - `this` теряется.
15
15
16
16
Вот как это может произойти с `setTimeout`:
17
17
@@ -37,7 +37,7 @@ let f = user.sayHi;
37
37
setTimeout(f, 1000); // контекст user потеряли
38
38
```
39
39
40
-
Метод `setTimeout` в браузере имеет особенность: он устанавливает `this=window` для вызова функции (для Node.js `this` становится объектом таймера, но здесь это не имеет значения). Таким образом, для `this.firstName` он пытается получить `window.firstName`, которого не существует. В других подобных случаях, как мы увидим, обычно `this` просто становится `undefined`.
40
+
Метод `setTimeout` в браузере имеет особенность: он устанавливает `this=window` для вызова функции (в Node.js `this` становится объектом таймера, но здесь это не имеет значения). Таким образом, для `this.firstName` он пытается получить `window.firstName`, которого не существует. В других подобных случаях, как мы увидим, обычно `this` просто становится `undefined`.
41
41
42
42
Задача довольно типичная - мы хотим передать метод объекта куда-то ещё (в этом конкретном случае - в планировщик), где он будет вызван. Как бы сделать так, чтобы он вызывался в правильном контексте?
43
43
@@ -163,7 +163,7 @@ sayHi(); // Привет, Вася!
163
163
setTimeout(sayHi, 1000); // Привет, Вася!
164
164
```
165
165
166
-
В строке `(*)` мы берем метод `user.sayHi` и привязываем его к `user`. `SayHi` - это «связанная» функция, которая может быть вызвана отдельно или передана в `setTimeout`- не имеет значения, контекст всегда будет правильным.
166
+
В строке `(*)` мы берем метод `user.sayHi` и привязываем его к `user`. `SayHi` - это «связанная» функция, которая может быть вызвана отдельно или передана в `setTimeout`(контекст всегда будет правильным).
167
167
168
168
Здесь мы можем видеть, что `bind` исправляет только `this`, а аргументы передаются «как есть»:
0 commit comments