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 .   Свойства объекта и прокси-объекты
   336   337   338   339   340   341   342   343   344   345   346