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

3.5 KiB
Raw Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7db2367417b2b2512b8a Використовуйте closure для захисту властивостей об’єкта від зовнішньої модифікації 1 18234 use-closure-to-protect-properties-within-an-object-from-being-modified-externally

--description--

У попередньому виклику bird мав загальнодоступну властивість name. Він вважається загальнодоступним, оскільки до нього можна отримати доступ та змінити його за межами визначення bird.

bird.name = "Duffy";

Тому будь -яка частина вашого коду може легко змінити назву bird на будь -яке значення. Подумайте про такі речі, як паролі та банківські рахунки, які легко змінюються будь -якою частиною вашої кодової бази. Це може спричинити багато проблем.

Найпростіший спосіб зробити цю загальнодоступну властивість приватною - це створити змінну всередині функції конструктора. Це змінює масштаб цієї змінної в межах функції конструктора в порівнянні з наявними в глобальних масштабах. Таким чином, змінна може бути доступна і змінена за допомогою методів також в межах функції конструктора.

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.

assert(code.match(/(var|let|const)\s+weight\s*\=\s*15\;?/g));

Ваш код повинен створити метод у Bird під назвою getWeight, який повертає значення приватної змінної weight.

assert(new Bird().getWeight() === 15);

Ваша функція getWeight повинна повернути приватну змінну weight.

assert(code.match(/((return\s+)|(\(\s*\)\s*\=\>\s*))weight\;?/g));

--seed--

--seed-contents--

function Bird() {
  this.weight = 15;


}

--solutions--

function Bird() {
  let weight = 15;

  this.getWeight = () => weight;
}