Skip to content

Commit 78c45ff

Browse files
authoredJan 4, 2025
Merge pull request #676 from zioneexe/patch-5
Fixing typos in Reference Type article
2 parents c53ce8c + 7878d2e commit 78c45ff

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed
 

Diff for: ‎1-js/99-js-misc/04-reference-type/article.md

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11

2-
# Посилальний Тип
2+
# Посилальний тип
33

44
```warn header="Поглиблений функціонал мови"
55
Ця стаття охоплює складну тему, щоб краще зрозуміти певні крайні випадки.
66
77
Це не є важливим. Багато досвідчених розробників живуть добре, не знаючи цього. Прочитайте, якщо ви хочете знати, як певні речі працюють під капотом.
88
```
99

10-
Динамічно оцінений виклик методу може втратити `this`.
10+
Динамічно обчислений виклик методу може втратити `this`.
1111

1212
Наприклад:
1313

@@ -22,7 +22,7 @@ user.hi(); // працює
2222

2323
// тепер викличмо user.hi або user.bye залежно від назви
2424
*!*
25-
(user.name == "John" ? user.hi : user.bye)(); // Помилка!
25+
(user.name == "Іван" ? user.hi : user.bye)(); // Помилка!
2626
*/!*
2727
```
2828

@@ -37,23 +37,23 @@ user.hi(); // працює
3737
user.hi();
3838
```
3939

40-
Це ні (динамічно оцінений метод):
40+
Це ні (динамічно обчислений метод):
4141
```js
42-
(user.name == "John" ? user.hi : user.bye)(); // Помилка!
42+
(user.name == "Іван" ? user.hi : user.bye)(); // Помилка!
4343
```
4444

4545
Чому? Якщо ми хочемо зрозуміти, чому це трапляється, загляньмо під капот, як працює виклик `obj.method()`.
4646

47-
## Пояснення Посилального Типу
47+
## Пояснення Посилального типу
4848

4949
Дивлячись уважно, ми можемо помітити дві операції в інструкції `obj.method()`:
5050

5151
1. По-перше, крапка `'.'` витягує властивість `obj.method`.
52-
2. Потім дужки `()` виконуйте її.
52+
2. Потім дужки `()` виконують її.
5353

54-
Отже, як інформація про `this` передається з першої частини до другої?
54+
Але як інформація про `this` передається з першої частини до другої?
5555

56-
Якщо ми поставимо ці операції на окремі рядки, то `this` напевно буде втрачено:
56+
Якщо ми поставимо ці операції на окремі рядки, то `this` буде втрачено:
5757

5858
```js run
5959
let user = {
@@ -64,13 +64,13 @@ let user = {
6464
*!*
6565
// розділимо отримання та виклик методу на два рядки
6666
let hi = user.hi;
67-
hi(); // Помилка, тому що this -- це undefined
67+
hi(); // Помилка, тому що this - це undefined
6868
*/!*
6969
```
7070

71-
Тут `hi = user.hi` поміщає функцію в змінну, а потім на останньому рядку, ця змінна повністю автономна, і тому не має `this`.
71+
Тут `hi = user.hi` поміщає функцію в змінну, а на наступному рядку, ця змінна повністю автономна, і тому не має `this`.
7272

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).**
7474

7575
Посилальний тип -- це "тип специфікації". Ми не можемо явно використовувати його, але він використовується всередині мови.
7676

@@ -87,22 +87,22 @@ hi(); // Помилка, тому що this -- це undefined
8787
(user, "hi", true)
8888
```
8989

90-
Коли дужки `()` викликаються з посилальним типом, вони отримують повну інформацію про об’єкт та його метод, і можуть встановити правильний `this` (`user` у даному випадку).
90+
Коли дужки `()` викликаються з посилальним типом, вони отримують повну інформацію про об’єкт та його метод, і можуть встановити правильний `this` (`user` у нашому випадку).
9191

9292
Посилальний тип -- це особливий "посередницький" внутрішній тип, який використовується з метою передачі інформації від крапки `.` до дужок виклику `()`.
9393

9494
Будь-яка інша операція, наприклад присвоєння `hi = user.hi` в цілому відкидає посилальний тип та приймає значення `user.hi` (функції) і передає його. Отже, будь-яка подальша операція "втрачає" `this`.
9595

96-
Отже, як результат, значення `this` передається правильно тільки тоді, якщо функція викликається безпосередньо за допомогою крапки `obj.method()` або синтаксису квадратних дужок `obj['method']()` (вони роблять одне й те ж саме). Існують різні способи розв’язання цієї проблеми, як [func.bind()](/bind#solution-2-bind).
96+
Отже, як результат, значення `this` передається правильно тільки тоді, коли функція викликається безпосередньо за допомогою крапки `obj.method()` або синтаксису квадратних дужок `obj['method']()` (вони роблять одне й те ж саме). Існують різні способи розв’язання цієї проблеми, наприклад [func.bind()](/bind#solution-2-bind).
9797

9898
## Підсумки
9999

100100
Посилальний тип -- це внутрішній тип мови.
101101

102102
Читання властивості, наприклад, крапкою `.` в `obj.method()` повертає не саме значення властивості, але спеціальне значення "посилального типу", яке зберігає як значення властивості, так і об’єкт, з якою він був взятий.
103103

104-
Це використовується для подальшого виклику методу за допомогою `()`, щоб отримати об’єкт і встановити `this` до цього.
104+
Це використовується для подальшого виклику методу за допомогою `()`, щоб отримати об’єкт і встановити `this` перед цим.
105105

106106
Для всіх інших операцій, посилальний тип автоматично стає значенням властивості (функцією у нашому випадку).
107107

108-
Вся ця механіка прихована від наших очей. Це лише важливо в тонких випадках, наприклад, коли метод отримується динамічно з об’єкта, використовуючи вираз.
108+
Уся ця механіка прихована від наших очей. Це важливо лише в тонких випадках, наприклад, коли метод отримується динамічно з об’єкта, використовуючи вираз.

0 commit comments

Comments
 (0)
Please sign in to comment.