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
Властивість `__proto__` вважається трохи застарілою. Вона існує з історичних причин, сучасна мова JavaScript пропонує використовувати функцію `Object.getPrototypeOf/Object.setPrototypeOf` замість `get/set` прототипу. Ми також розглянемо ці функції пізніше.
140
140
141
-
Згідно зі специфікацією мови, `__proto__`повинно підтримуватись тільки в браузерах. Проте насправді, усі середовища, включаючи серверні, підтримують `__proto__`, а тому використовувати його можна досить безпечно.
141
+
Згідно зі специфікацією мови, `__proto__`має підтримуватись тільки в браузерах. Проте насправді, усі середовища, включаючи серверні, підтримують `__proto__`, а тому використовувати його можна досить безпечно.
142
142
143
143
Оскільки позначення `__proto__` інтуїтивно більш зрозуміле, ми будемо його використовуємо в прикладах.
144
144
```
@@ -220,7 +220,7 @@ alert(user.fullName); // John Smith, стан об’єкта user захище
220
220
221
221
Таким чином, виклик в методі `set` виразу `admin.fullName=` буде брати як `this` значення властивостей з об’єкту `admin` а не `user`.
222
222
223
-
Це дуже важлива річ, бо наприклад, ми можемо мати дуже великий об’єкт з багатьма методами, і об’єкти, які успадковують властивості або методи від того великого батьківського об’єкту. І, якщо ми візьмемо успадкований об'єкт, поставимо після його імені крапку і далі викличемо метод, який бережеться в тому "батьківському" великому об'єкті, то цей метод змінить стан лише самого успадкованого об'єкта. На стан того великого "батьківського" об'єкта в цій ситуації цей метод не вплине.
223
+
Це дуже важлива річ, бо наприклад, ми можемо мати дуже великий об’єкт з багатьма методами, і об’єкти, які успадковують властивості або методи від того великого батьківського об’єкту. І, якщо ми візьмемо успадкований об'єкт, поставимо після його імені крапку і далі викличемо метод, який зберігається в тому "батьківському" великому об'єкті, то цей метод змінить стан лише самого успадкованого об'єкта. На стан того великого "батьківського" об'єкта в цій ситуації цей метод не вплине.
224
224
225
225
У цьому прикладі, об’єкт `animal` надає "набір методів", а об’єкт `rabbit` може використовувати якісь з цих методів.
226
226
@@ -317,7 +317,7 @@ for(let prop in rabbit) {
317
317
318
318
Зауважте одну цікаву річ: звідки взагалі взявся метод `rabbit.hasOwnProperty`? Ми його не визначали. Дивлячись на ланцюжок успадкувань ми можемо побачити, що його визначення йде від `Object.prototype.hasOwnProperty`. Інакше кажучи, він успадковується.
319
319
320
-
...але чому метод `hasOwnProperty` не з'являється в циклі `for..in` поряд з іншими властивостями (`eats` та `jumps`), якщо сам цикл `for..in` ітерує або проходить в тому числі по успадкованим властивостям?
320
+
...але чому метод `hasOwnProperty` не з'являється в циклі `for..in` поряд з іншими властивостями (`eats` та `jumps`), якщо сам цикл `for..in` ітерує або проходить в тому числі успадкованими властивостям?
321
321
322
322
Відповідь проста: вони позначені (ще можна сказати, що в них стоять прапорці) як такі, що їх не можна перераховувати (not enumerable). Так само як і інші властивості в глобальному об’єкті `Object.prototype`. У цих властивостей прапорець стоїть як `enumerable:false`, а цикл `for..in` зчитує тільки ті властивості, які позначені як такі, що їх можна перераховувати. Ось чому і решта властивостей глобального об’єкту `Object.prototype` не зчитуються також.
0 commit comments