Skip to content

Commit c6440e9

Browse files
authored
Add files via upload
1 parent 5fcb816 commit c6440e9

File tree

1 file changed

+22
-0
lines changed
  • 1-js/99-js-misc/04-reference-type/3-why-this

1 file changed

+22
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
Вот как это объясняется.
3+
4+
1. Это обычный вызов метода объекта через точку `.`, и `this` ссылается на объект перед точкой.
5+
6+
2. Здесь то же самое. Круглые скобки (оператор группировки) тут не изменяют порядок выполнения операций - доступ к методу через точку в любом случае срабатывает первым.
7+
8+
3. Здесь мы имеем более сложный вызов `(expression).method()`. Такой вызов работает, как если бы он был разделён на 2 строчки:
9+
10+
```js no-beautify
11+
f = obj.go; // вычисляется выражение (переменная f ссылается на код функции)
12+
f(); // вызов функции, на которую ссылается f
13+
```
14+
15+
Здесь `f()` выполняется как функция, без передачи значения `this`.
16+
17+
4. Тут похожая ситуация на случай `(3)` - идёт потеря значения `this`.
18+
19+
Чтобы объяснить поведение в примерах `(3)` и `(4)`, нам нужно помнить, что доступ к свойству (через точку или квадратные скобки) возвращает специальное значение ссылочного типа (Reference Type).
20+
21+
За исключением вызова метода, любая другая операция (подобно операции присваивания `=` или сравнения через логические операторы, например `||`) превращает это значение в обычное, которое не несёт информации, позволяющей установить `this`.
22+

0 commit comments

Comments
 (0)