, чтобы пользователи не устанавливали свои собственные значения для этих свойств с помощью консоли.
Самый простой способ сделать это - просто запретить доступ к экземпляру Hero с верхнего уровня -например, обернуть все в IIFE:
(() => {
const hero = new Hero();
// do stuff with hero
})();
Тогда все, что вы делаете внутри IIFE, будет номинально приватным - пользователь не сможет зайти в консоль и сослаться и изменить то, что он хочет,(Тем не менее, поскольку он является их браузером, они могут сделать это другими способами, например, с помощью пользовательского сценария - вы не можете доверять всему, что выполняется на клиентской машине, чтобы это было сделано законно.)
Используя аналогичный метод, полагаясь на номинальную конфиденциальность замыкания, вы можете сделать amount
получателем переменной замыкания без установщика, гарантируя, что amount
не будет изменяться извне (если, конечно,исходный код изменяется, и в этом случае все ставки в любом случае отключены):
const Hero = (() => {
const privateHeroGold = new WeakMap();
return class Hero {
constructor() {
privateHeroGold.set(this, 0);
}
get gold() {
return privateHeroGold.get(this);
}
set gold(g) {
console.log("You're not allowed to do that!");
}
}
})();
const hero = new Hero();
console.log(hero.gold);
hero.gold = 5;
console.log(hero.gold);