В книге, которую я сейчас читаю, рассказывается о том, как мы можем использовать WeakMap для обеспечения конфиденциальности с помощью приведенного ниже примера кода.
const Car = (function() {
const carProps = new WeakMap();
class Car {
constructor(make, model) {
this.make = make;
this.model = model;
this._userGears = ["P", "N", "R", "D"];
carProps.set(this, { userGear: this._userGears[0] });
}
get userGear() {
return carProps.get(this).userGear;
}
set userGear(value) {
if (this._userGears.indexOf(value) < 0)
throw new Error(`Invalid gear: ${value}`);
carProps.get(this).userGear = value;
}
shift(gear) {
this.userGear = gear;
}
}
return Car;
})();
Я не могу понять, как такой код может действительно сделать механизмсвойство private и не разрешает доступ извне.
кажется, что, используя
carProps.set(this, { userGear: this._userGears[0] });
, мы скрываем userGear и делаем его приватным, чтобы к нему нельзя было получить доступ.
Однако, когда я использую
const car1 = new Car("Toyota", "Prius");
console.log(car1);
console.log(car1.userGear);
, он показывает мне результат
Car {
make: 'Toyota',
model: 'Prius',
_userGears: [ 'P', 'N', 'R', 'D' ] }
P
Я не уверен, почему я мог получить доступ к userGear и получил 'P' вместо 'undefined'здесь, где предполагается, что он недоступен.
Возможно, я делаю что-то неправильно или неправильно понял концепцию.
Может кто-нибудь помочь мне разобраться в WeakMap?