Files
freeCodeCamp/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/object-oriented-programming/use-closure-to-protect-properties-within-an-object-from-being-modified-externally.md

82 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

---
id: 587d7db2367417b2b2512b8a
title: >-
Використовуйте closure для захисту властивостей об’єкта від зовнішньої модифікації
challengeType: 1
forumTopicId: 18234
dashedName: >-
use-closure-to-protect-properties-within-an-object-from-being-modified-externally
---
# --description--
У попередньому виклику `bird` мав загальнодоступну властивість `name`. Він вважається загальнодоступним, оскільки до нього можна отримати доступ та змінити його за межами визначення `bird`.
```js
bird.name = "Duffy";
```
Тому будь -яка частина вашого коду може легко змінити назву `bird` на будь -яке значення. Подумайте про такі речі, як паролі та банківські рахунки, які легко змінюються будь -якою частиною вашої кодової бази. Це може спричинити багато проблем.
Найпростіший спосіб зробити цю загальнодоступну властивість приватною - це створити змінну всередині функції конструктора. Це змінює масштаб цієї змінної в межах функції конструктора в порівнянні з наявними в глобальних масштабах. Таким чином, змінна може бути доступна і змінена за допомогою методів також в межах функції конструктора.
```js
function Bird() {
let hatchedEgg = 10;
this.getHatchedEggCount = function() {
return hatchedEgg;
};
}
let ducky = new Bird();
ducky.getHatchedEggCount();
```
`getHatchedEggCount` є привілейованим методом, оскільки він має доступ до приватної змінної `hatchedEgg`. Це можливо, тому що `hatchedEgg` оголошено в тому ж контексті, що і `getHatchedEggCount`. У JavaScript функція завжди має доступ до контексту, в якому вона була створена. Це називається `closure`.
# --instructions--
Змініть спосіб `weight` так як зазначається у функції `Bird`, щоб вона стала приватною змінною. Потім створіть метод `getWeight`, який поверне значення `weight` 15.
# --hints--
Властивість `weight` має бути приватною змінною і їй має бути присвоєно значення `15`.
```js
assert(code.match(/(var|let|const)\s+weight\s*\=\s*15\;?/g));
```
Ваш код повинен створити метод у `Bird` під назвою `getWeight`, який повертає значення приватної змінної `weight`.
```js
assert(new Bird().getWeight() === 15);
```
Ваша функція `getWeight` повинна повернути приватну змінну `weight`.
```js
assert(code.match(/((return\s+)|(\(\s*\)\s*\=\>\s*))weight\;?/g));
```
# --seed--
## --seed-contents--
```js
function Bird() {
this.weight = 15;
}
```
# --solutions--
```js
function Bird() {
let weight = 15;
this.getWeight = () => weight;
}
```