Page 342 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 342
p
ap i n fo . company = ' t est ' ;
/ / TypeError: Нельзя присваивать значение свойству только для чтения ' с атрапу '
y
e
Obj ect . definePropert ( appinfo, ' c ompany ' , { enumeraЫ : false } ) ;
/ / TypeError: Нельзя переопределять свойств : сатрапу
о
Запечатывание объекта предотвращает добавление новых свойств, реконфигура
цию или удаление существующих свойств. Запечатывание применяется, когда нуж
но, чтобы работали все методы экземпляра класса, изменяющие свойства объекта (по
крайней мере до тех пор, пока они не попытаются перенастроить эти свойства). Вы
можете запечатать объект методом Object . seal, а узнать, запечатан ли объект, - вы
звав метод Obj ec;t . s Sealed:
i
cl s s Logger {
a
constructor ( n ame )
this . name = name ;
this . l og = [ ] ;
add ( e ntry) {
this . log . push ( {
log : entry,
w
t i mestamp : Date . n o ( ) ,
} ) ;
const log = new Logger ( " Бортовой журнал" ) ;
Obj ect . s eal ( l og) ;
Obj ect . i s S ealed ( l og) ; / / true
log . name = "Бортовой журнал капитана" ; / / ОК
log . a dd ( "Eщe один скучный день на море . . . . " ) ; / / ОК
log . newProp = ' t es ' ;
t
/ / TypeError: Нельзя добавить свойство пewProp, объект не расширяем
log . name = ' t e s t ' ; / / ОК
delete log. name ;
/ / TypeError : Нельзя у д алить свойство 'пате '
Obj ect . defineProperty ( log, ' l og ' , { enumeraЫe : false } ) ;
/ / TypeError: Нельзя переопределить свойство : log
И наконец самая слабая защита - сделать объект нерасширяемым, что запретит
только добавление новых свойств. Свойствам могут быть присвоены значения, они
могут быть удалены и реконфигурированы. Мы можем продемонстрировать методы
Защита объектов: замораживание, запечатывание и запрет расширения 345

