Skip to content

Minor improvements in property-accessors article #744

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 27, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions 1-js/07-object-properties/02-property-accessors/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ alert(user.fullName); // Тарас Мельник
*/!*
```

Ззовні аксесор виглядає як звичайна властивість. В цьому і є ідея аксесорів властивостей. Ми не *викликаємо* `user.fullname` як функцію, ми *читаємо* її як звичайну властивість: гетер виконає свою роботу за кулісами.
Ззовні аксесор виглядає як звичайна властивість. В цьому і є ідея аксесорів властивостей. Ми не *викликаємо* `user.fullname` як функцію, ми *читаємо* її як звичайну властивість: гетер виконає свою роботу за лаштунками.

Зараз `fullname` має тільки гетер. Якщо ми намагаємося присвоїти `user.fullName=`, буде помилка:

Expand Down Expand Up @@ -87,7 +87,7 @@ let user = {
*/!*
};

// виконується встановлення повного ім’я із заданим значенням.
// виконується встановлення повного імені із заданим значенням.
user.fullName = "Аліса Бондар";

alert(user.name); // Аліса
Expand Down Expand Up @@ -134,9 +134,9 @@ alert(user.fullName); // Іван Іванов
for(let key in user) alert(key); // name, surname
```

Будь ласка, зверніть увагу, що властивість може бути або аксесором (має `get/set` методи) або властивістю даних (має `value`), але не обома одразу.
Будь ласка, зверніть увагу, що властивість може бути або аксесором (має `get/set` методи) або властивістю даних (має `value`), але не обома одночасно.

Якщо ми спробуємо передати як `get` і `value` у тому ж дескрипторі, то буде помилка:
Якщо ми спробуємо передати як `get` так і `value` у тому ж дескрипторі, то буде помилка:

```js run
*!*
Expand Down Expand Up @@ -180,14 +180,14 @@ user.name = ""; // Ім’я занадто коротке...

Отже, ім’я зберігається у властивості `_name`, а доступ виконується за допомогою гетера та сетера.

Технічно зовнішній код може мати доступ до ім’я безпосередньо за допомогою `user._name`. Але існує широко відома домовленість, що властивості, що починаються з підкреслення `"_"`, є внутрішніми і не повинні використовуватися ззовні об’єкта.
Технічно зовнішній код може мати доступ до ім’я безпосередньо за допомогою `user._name`. Але існує широко відома домовленість, що властивості, які починаються з підкреслення `"_"`, є внутрішніми і не повинні використовуватись ззовні об’єкта.


## Використання для сумісності

Одним з чудових прикладів використання аксесорів полягає у тому, що вони дозволяють контролювати "звичайну" властивість даних в будь-який момент, замінюючи її гетером і сетером і налаштовуючи її поведінку.
Один із чудових прикладів використання аксесорів полягає у тому, що вони дозволяють контролювати "звичайну" властивість даних в будь-який момент, замінюючи її гетером і сетером, і налаштовуючи її поведінку.

Уявіть, що ми почали реалізувати об’єкти користувача за допомогою властивостей даних `name` та `age`:
Уявіть, що ми почали реалізовувати об’єкти користувача за допомогою властивостей даних `name` та `age`:

```js
function User(name, age) {
Expand Down