Page 179 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 179
get userGear ( ) { return this . userGe r ;
a
s e t userGear ( v alue ) {
if ( t his . _userGears . i ndexOf ( v alue ) < 0 )
throw new Еrrоr ( ' Ошибочная передача : $ { value ) ' ) ;
this . userGear = value ;
i
shift ( g ear) { th s . userGear = gear; )
Проницательный читатель заметил, что мы не устранили проблему, поскольку
значение _ userGear все еще можно установить непосредственно: carl . _ userGear =
' Х ' . В этом примере мы используем "ограничение доступа для бедных" - свойства,
имена которых начинаются с символа подчеркивания, мы считаем закрытыми. Эта
защита сугубо в соглашении, позволяющем быстро просмотреть код и выявить свой
ства, к которыми вы не должны обращаться непосредственно.
Если вы действительно должны обеспечить конфиденциальность, то можете ис
пользовать экземпляр WeakMap (см. главу 1 0 ), который защищен областью видимо
сти (если мы не будем использовать WeakMap, то наши закрытые свойства никогда
не будут выходить из области видимости, даже если экземпляры, к которым они от
носятся, выйдут). Чтобы сделать основное текущее свойство передачи действительно
закрытым, мы можем изменить свой класс Car так.
const Car = ( f unction ( ) {
const carProps = new WeakMap ( ) ;
class Car {
e
e
constructor (mak , mod l )
th s . m ake = make ;
i
this . m odel = mode ;
l
thi s . _ userGears = [ ' Р ' , ' N ' , ' R ' , ' D ' ] ;
a
(
carProps . set t h i s , { userGe r : this . _ userGears О ] ) ) ;
[
get userGear ( ) { return carProps . g et ( t h i s ) . u serGear ;
(
set userGear v alue ) {
(
if ( t his . _userGears . indexOf v alue ) < 0 )
throw new Еrrоr ( ' Ошибочная передача : $ { value ) ' ) ;
carProps . g et ( t h i s ) . u serGear = value ;
i
shift ( g ear) { th s . userGear gear; )
return Car;
} ) ( ) ;
1 8 0 Глава 9. Объекты и объектно-ориентированное программирование

