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
   337   338   339   340   341   342   343   344   345   346   347