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