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
**In chapter 01-08-02 prototype-inheritance**
There were many mistakes.
And some of sentences were correct, but they were "unnatural" in Ukrainian and make understanding more difficult.
Copy file name to clipboardExpand all lines: 1-js/08-prototypes/02-function-prototype/article.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,15 @@
2
2
3
3
Як відомо, ми можемо створювати нові об’єкти за допомогою функції-конструктора, ось так `new F()`.
4
4
5
-
Якщо розглядати`F.prototype`як властивість об’єкта, то оператор `new` автоматично створює приховану властивість`[[Prototype]]` для новоствореного об’єкта.
5
+
Якщо в`F.prototype`міститься об'єкт, то оператор `new` автоматично встановлює той об'єкт в`[[Prototype]]` для новоствореного об’єкта.
6
6
7
7
```smart
8
-
JavaScript мала можливість успадкування властивостей через прототипи ще від самого початку її створення. Це було одним з головних особливостей мови.
8
+
JavaScript використовувала прототипне наслідування з моменту своєї появи. Це одна з особливостей цієї мови.
9
9
10
-
Але в ті часи, не було прямого доступу до прототипів. Тільки одна річ, яка працювала надійно, була властивість функції-конструктора `"prototype"` , яка і описана в цій главі. Ось чому ще існує багато коду де цю властивість використовують.
10
+
Але раніше, в давні часи, прямого доступу до прототипа в об'єкта не було. Надійно працювала лише властивість "prototype" функції-конструктора, описане в цьому розділі. Тому ця властивість використовується в багатьох скриптах.
11
11
```
12
12
13
-
Зауважте, що `F.prototype` тут означає звичайну властивість, яку назвали `"prototype"` в об’єкті `F`. Це звучить дуже співзвучно з терміном "prototype", але тут це означає всього лиш звичайне ім’я властивості.
13
+
Зауважте, що `F.prototype` тут є звичайною властивістю, яку назвали `"prototype"` в об’єкті `F`. Це звучить дуже співзвучно з терміном "prototype", але тут це означає всього лиш звичайне ім’я властивості.
14
14
15
15
Ось приклад:
16
16
@@ -27,37 +27,37 @@ function Rabbit(name) {
27
27
Rabbit.prototype= animal;
28
28
*/!*
29
29
30
-
let rabbit =newRabbit("White Rabbit"); // rabbit.__proto__ == animal
30
+
let rabbit =newRabbit("Білий кролик"); // rabbit.__proto__ == animal
31
31
32
32
alert( rabbit.eats ); // true
33
33
```
34
34
35
-
Вираз `Rabbit.prototype = animal` дослівно означає наступне: "коли `new Rabbit` створено, його властивість `[[Prototype]]`посилається на об’єкт `animal`".
35
+
Вираз `Rabbit.prototype = animal` дослівно означає наступне: "коли буде створено `new Rabbit`, його властивість `[[Prototype]]`має посилатись на об'єкт `animal`".
36
36
37
37
Ось кінцева картинка:
38
38
39
39

40
40
41
-
На картинці, `"prototype"` що показана горизонтальною стрілкою, це звичайна властивість, а `[[Prototype]]`показана вертикальною, що означає`rabbit` успадковує властивості від свого прототипа `animal`.
41
+
На картинці, `"prototype"` що зображена біля горизонтальної стрілки - це звичайна властивість, а `[[Prototype]]`, що зображена біля вертикальної стрілки - вказує на те, що`rabbit` успадковує властивості від свого прототипа `animal`.
42
42
43
-
```smart header="`F.prototype` використовується тільки у разі використання функції-конструктора `new F`"
44
-
Властивість `F.prototype` використовується коли буде викликано`new F`, і створює властивість `[[Prototype]]`для нового об’єкта.
43
+
```smart header="`F.prototype` використовується тільки у в момент виклику функції-конструктора `new F`"
44
+
`F.prototype` використовується тільки при виклику`new F` і присвоюється в якості властивості `[[Prototype]]` нового об'єкта.
45
45
46
-
Якщо властивість `F.prototype`після створення змінюється (`F.prototype = <another object>`), тоді і новий об’єкт який створюється функцією-конструктором`new F` буде мати посилання `[[Prototype]]`на інший об’єкт, а в раніше створених об’єктах є свої прототипи які були визначені ще при їх створенні.
46
+
Якщо після створення властивість `F.prototype`зміниться (`F.prototype = <інший об'єкт>`), то нові об'єкти, створені з допомогою`new F`, будуть мати в якості `[[Prototype]]` інший об'єкт, а вже існуючі об'єкти будуть посилатись на старий.
47
47
```
48
48
49
49
## Типове значення F.prototype, властивості конструктора
50
50
51
-
Кожна функція має властивість `"prototype"` навіть якщо ми цю властивість самі не прописуємо. Тобто вона існує за замовчуванням, або ця властивість є типовою.
51
+
Кожна функція за замовчуванням має властивість `"prototype"`, навіть якщо ми цю властивість самі не прописуємо.
52
52
53
-
В свою чергу, така типова властивість `"prototype"` представляє собою об’єкт, який має єдину властивість з назвою `constructor`, що зворотньо посилається на назву самої функції-конструктора.
53
+
За замовчуванням "prototype" є об'єктом з однією єдиною властивістю `constructor`, яка посилається на саму ж функцію.
54
54
55
55
Ось як тут:
56
56
57
57
```js
58
58
function Rabbit() {}
59
59
60
-
/* властивість створена за замовчуванням
60
+
/* значення prototype, яке призначається за замовченням
Ми можемо використовувати властивість `constructor` для створення нових об’єктів використовуючи той самий конструктор, який вже існує.
91
+
Ми можемо використовувати властивість `constructor` для створення нових об’єктів використовуючи ту саму функцію-конструктор, як і для вже існуючих.
92
92
93
93
Як тут:
94
94
@@ -98,22 +98,22 @@ function Rabbit(name) {
98
98
alert(name);
99
99
}
100
100
101
-
let rabbit =newRabbit("White Rabbit");
101
+
let rabbit =newRabbit("Білий кролик");
102
102
103
103
*!*
104
-
let rabbit2 =newrabbit.constructor("Black Rabbit");
104
+
let rabbit2 =newrabbit.constructor("Чорний кролик");
105
105
*/!*
106
106
```
107
107
108
-
Це дуже практично у випадку наявності об’єкта, але не знаємо за допомогою якого саме конструктора той об’єкт був створений (для прикладу який був імпортований з якоїсь бібліотеки), а нам потрібно створити новий об’єкт по типу того, що вже існує.
108
+
Це дуже практично у випадку якщо ми маємо об'єкт, не знаємо за допомогою якого саме конструктора той об’єкт був створений (до прикладу якщо він був імпортований з якоїсь бібліотеки), а нам потрібно створити новий об’єкт по типу того, що вже існує.
109
109
110
-
Але самим важливим моментом щодо `"constructor"` є те, що...
110
+
Але найважливішим моментом щодо `"constructor"` є те, що...
111
111
112
112
**...Сама мова JavaScript не забезпечує правильного значення `"constructor"`.**
113
113
114
-
Так, воно існує за замовчуванням у властивостях `"prototype"` для функцій, але це все, що є. Те, що стається з `"constructor"`пізніше, цілковито залежить від нас самих.
114
+
Так, `constructor` існує за замовчуванням у властивостях `"prototype"` для функцій, але це й усе. Подальша доля `"constructor"`повністю в наших руках.
115
115
116
-
А саме, якщо ми замінимо типове значення на якесь інше, тоді в ньому не буде ніякого `"constructor"`.
116
+
А саме, якщо ми замінимо дефолтне значення `prototype`на якесь інше, тоді в `prototype` не буде ніякого `"constructor"`.
Отже, щоб мати правильний `"constructor"`ми можемо чи додавати, чи видаляти властивості у дефолтному `"prototype"` замість того, щоб її цілковито заміняти:
132
+
Отже, щоб мати правильний `"constructor"`, замість цілком заміняти дефолтний `prototype` якимось нашим іншим об'єктом, ми можемо просто додавати або видаляти властивості до уже наявного дефолтного `"prototype"`:
133
133
134
134
```js
135
135
functionRabbit() {}
@@ -140,7 +140,7 @@ Rabbit.prototype.jumps = true
140
140
// а тому дефолтне Rabbit.prototype.constructor зберігається
141
141
```
142
142
143
-
чи по іншому, відновлюємо `constructor` вручну:
143
+
чи ось інший варіант, відновлюємо `constructor` вручну:
144
144
145
145
```js
146
146
Rabbit.prototype= {
@@ -161,7 +161,7 @@ Rabbit.prototype = {
161
161
Все досить просто, тільки треба додати кілька деталей щоб усе було зрозуміло:
162
162
163
163
- Властивість об’єкта `F.prototype` (ні в якому разі не `[[Prototype]]`) встановлює приховану властивість `[[Prototype]]` нового об’єкта, тільки тоді, коли буде викликана через `new F()`.
164
-
- Значення властивості `F.prototype` може бути, або посиланням на об’єкт, або `null`: інші значення не працюють.
164
+
- Значення властивості `F.prototype` може бути або посиланням на об’єкт, або `null`: значення інших типів не спрацюють.
165
165
- Тільки властивість `"prototype"` має такий спеціальний ефект: може встановлюватись в конструкторі та може викликатись через оператор `new`.
166
166
167
167
У звичайних об’єктах властивість `prototype` не є чимось спеціальним:
0 commit comments