Page 341 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 341
месте может изменить объект любым способом, довольно просто написать код, кото
рый непреднамеренно или, что еще хуже, преднамеренно, будет делать опасные вещи.
В JavaScript предусмотрено три механизма для предотвращения неумышленных
изменений (и затруднения злонамеренных): замораживание (freezing), запечатыва
ние (sealing) и запрет расширения (preventing extension).
Замораживание предотвращает любые изменения объекта. Как только вы замора
живаете объект, вы не можете
• установить значение его свойств;
• вызывать методы, которые изменяют значение свойств объекта;
• вызывать функции установки значения объекта (которые изменяют значение
свойств объекта);
• добавлять новые свойства;
• добавлять новые методы;
• изменять конфигурацию существующих свойств или методов.
По сути, замораживание объекта делает его неизменным. Это полезно для объек
тов-данных, поскольку замораживание объекта, содержащего методы делает беспо
лезным любые методы, которые изменяют состояние объекта.
Чтобы заморозить объект, используйте метод Object . freeze (чтобы выяснить,
заморожен ли объект, вызовите метод Obj ect . s Frozen). Предположим, например,
i
что у вас есть объект, который вы используете для хранения неизменяемой инфор
мации о своей программе (такой, как название компании, версия, идентификатор
сборки и метод получения информации об авторских правах).
const app n fo = {
i
company : ' W hite Knight Software, Inc . ' ,
version : ' 1 . . 5 ' ,
3
9
-
i
build d : ' O a 9 9 5 4 4 8 - ead4 4 a 8b-b05 0-9c 0 8 3 2 7 9 ea2 ' ,
/ / эта функция только читает значения свойств , поэтому замораживание
/ ! на нее не повлияет
copyright ( ) {
return ' с $ { n ew Date ( ) . g etFullYear ( ) } , $ { t his . company} ; '
} ,
} ;
Obj ect . freeze ( a ppinfo ) ;
o
Obj ect . i s F rozen ( a ppinf ) ; / / true
appinfo . newProp = ' t e s t ' ;
/ / T y p eError : Нельзя добавить свойство newProp, объект не расширяем
delete appinfo . company;
/ / T y p eError : Нельзя у д алить свойство ' с атрапу '
344 Глава 2 1 . Свойства объекта и прокси-объекты

