3.5 KiB
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;
}