Page 343 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 343
Obj ect . preventExtensions и Obj ect . i s ExtensiЫe на примере нашего прежнего
класса Logger.
const log2 = new Logger ( " Жypнaл первого помощника" } ;
2
j
Ob e c t . preventExtensions ( l og } ;
2
Obj ect . isExtensiЬle ( l og } ; / / true
log2 . name = "Бортовой журнал первого помощника" ; // ОК
log2 . a dd ( "Eщe один скучный день на море . . . . " } ; / / ОК
log2 . newProp = ' t est ' ;
/ / TypeError: Нельзя добавить свойство newProp, объект не ра сширяем
log2 . name = ' t est ' ; 1 1 ок
delete log2 . name ; 1 1 ок
Obj ect . defineProperty ( l og2 , ' l og ' ,
{ enumeraЫe : false } } ; 1 1 ок
Я использую метод Obj ect . preventExtensions не очень часто. Для предотвраще
ния модификации объекта обычно я также хочу предотвратить удаление и реконфи
гурацию его свойств, поэтому я предпочитаю запечатывать объект.
Возможности защиты объектов приведены в табл. 1 . 1 .
2
2
Таблица 1 . 1 . Возможности защиты объектов
Действие Обычный Заморожен- Запечатан- Нерасwиряе-
объект ный объект ный объект мый объект
Доба ление с в ойст в а Разрешено Запрещено Запрещено Запрещено
в
Чтение с в ойст в а Разрешено Разрешено Разрешено Разрешено
тв
Устано в ка значения с в ойс а Разрешено Запрещено Разрешено Разрешено
Перенастройка с в ойст в а Разрешено Запрещено Запрещено Разрешено
Удаление с в ойст в а Разрешено Запрещено Запрещено Разрешено
Прок си-объекты
П р окси-объекты (proxy) - это нововведение ЕSб, которое обеспечивает дополни
тельные функциональные возможности метапрограммuрованuя (metaprogramming),
т.е. способности программы изменять саму себя.
Прокси-объект, по существу, способен перехватывать и (опционально) изменять
действия объекта. Для начала рассмотрим простой пример: изменение свойства до
ступа. Начнем с обычного объекта, у которого есть несколько свойств.
const coefficients = {
а : 1 ,
Ь : 2 ,
с : 5 ,
} ;
346 Глава 2 1 . Свойства объекта и прокси-объекты

