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
Отже, як інформація про `this` передається з першої частини до другої?
54
+
Але як інформація про `this` передається з першої частини до другої?
55
55
56
-
Якщо ми поставимо ці операції на окремі рядки, то `this`напевно буде втрачено:
56
+
Якщо ми поставимо ці операції на окремі рядки, то `this` буде втрачено:
57
57
58
58
```js run
59
59
let user = {
@@ -64,13 +64,13 @@ let user = {
64
64
*!*
65
65
// розділимо отримання та виклик методу на два рядки
66
66
let hi =user.hi;
67
-
hi(); // Помилка, тому що this -- це undefined
67
+
hi(); // Помилка, тому що this - це undefined
68
68
*/!*
69
69
```
70
70
71
-
Тут `hi = user.hi` поміщає функцію в змінну, а потім на останньому рядку, ця змінна повністю автономна, і тому не має `this`.
71
+
Тут `hi = user.hi` поміщає функцію в змінну, а на наступному рядку, ця змінна повністю автономна, і тому не має `this`.
72
72
73
-
**Щоб зробити виклик `user.hi()` робочим, JavaScript використовує трюк -- крапка `'.'` повертає не функцію, а значення спеціального [посилальний типу](https://tc39.github.io/ecma262/#sec-reference-specification-type).**
73
+
**Щоб зробити виклик `user.hi()` робочим, JavaScript використовує трюк -- крапка `'.'` повертає не функцію, а значення спеціального [посилального типу](https://tc39.github.io/ecma262/#sec-reference-specification-type).**
74
74
75
75
Посилальний тип -- це "тип специфікації". Ми не можемо явно використовувати його, але він використовується всередині мови.
76
76
@@ -87,22 +87,22 @@ hi(); // Помилка, тому що this -- це undefined
87
87
(user, "hi", true)
88
88
```
89
89
90
-
Коли дужки `()` викликаються з посилальним типом, вони отримують повну інформацію про об’єкт та його метод, і можуть встановити правильний `this` (`user` у даному випадку).
90
+
Коли дужки `()` викликаються з посилальним типом, вони отримують повну інформацію про об’єкт та його метод, і можуть встановити правильний `this` (`user` у нашому випадку).
91
91
92
92
Посилальний тип -- це особливий "посередницький" внутрішній тип, який використовується з метою передачі інформації від крапки `.` до дужок виклику `()`.
93
93
94
94
Будь-яка інша операція, наприклад присвоєння `hi = user.hi` в цілому відкидає посилальний тип та приймає значення `user.hi` (функції) і передає його. Отже, будь-яка подальша операція "втрачає" `this`.
95
95
96
-
Отже, як результат, значення `this` передається правильно тільки тоді, якщо функція викликається безпосередньо за допомогою крапки `obj.method()` або синтаксису квадратних дужок `obj['method']()` (вони роблять одне й те ж саме). Існують різні способи розв’язання цієї проблеми, як[func.bind()](/bind#solution-2-bind).
96
+
Отже, як результат, значення `this` передається правильно тільки тоді, коли функція викликається безпосередньо за допомогою крапки `obj.method()` або синтаксису квадратних дужок `obj['method']()` (вони роблять одне й те ж саме). Існують різні способи розв’язання цієї проблеми, наприклад[func.bind()](/bind#solution-2-bind).
97
97
98
98
## Підсумки
99
99
100
100
Посилальний тип -- це внутрішній тип мови.
101
101
102
102
Читання властивості, наприклад, крапкою `.` в `obj.method()` повертає не саме значення властивості, але спеціальне значення "посилального типу", яке зберігає як значення властивості, так і об’єкт, з якою він був взятий.
103
103
104
-
Це використовується для подальшого виклику методу за допомогою `()`, щоб отримати об’єкт і встановити `this`до цього.
104
+
Це використовується для подальшого виклику методу за допомогою `()`, щоб отримати об’єкт і встановити `this`перед цим.
105
105
106
106
Для всіх інших операцій, посилальний тип автоматично стає значенням властивості (функцією у нашому випадку).
107
107
108
-
Вся ця механіка прихована від наших очей. Це лише важливо в тонких випадках, наприклад, коли метод отримується динамічно з об’єкта, використовуючи вираз.
108
+
Уся ця механіка прихована від наших очей. Це важливо лише в тонких випадках, наприклад, коли метод отримується динамічно з об’єкта, використовуючи вираз.
0 commit comments