Page 336 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 336

ГЛ В А  1
                                                                           А
                                                                                 2
                                                С в о й с т в а объ        екта


                                                                 -
                                                и  р ок и объ             ект ы
                                                   п
                                                            с











       Свойства доступа: получатели и установщ                  и к и

          Существует два типа свойств объектов: свойства данных (data property) и свойства
       доступа (accessor property). Мы уже сталкивались с обоими типами, но свойства до­
       ступа остались за кадром благодаря некоторым синтаксическим нововведениям ЕSб (в
       главе 9 мы называли их "динамическими свойствами").
          Мы знакомы с функциональными свойствами (или методами); свойства доступа
       подобны им, но у них есть две функции (получения значения (getter) и установки зна­
       чения (setter)), которые при доступе к ним действуют скорее как свойство данных,
       чем как функция.
          Давайте рассмотрим динамические свойства. Предположим в  классе User есть
                     i
       методы setEma l   и getEmail. Мы решили использовать методы "get" и "set" вместо
                           a
       обычного свойства em i l   потому, что хотим предотвратить ввод пользователем не­
       допустимого адреса электронной почты. Наш класс очень прост (для простоты мы
       считаем любую строку, содержащую символ " @ "   допустимым адресом электронной
       почты).
       const  USER  EМAIL  =  SymЬol ( ) ;
       class  User  {
           setEma l (v l ue )  {
                    a
                 i
               if ( ! / @ / . t est ( v alu ) )  throw  new  Еrrоr ( ' Неправильный  адрес :  $ { valu } ' ) ;
                               e
                                                                            e
               this [USER _ EМAIL ]    =  value ;
           getEmail  )
                   (
               return  this [ U SER _ EМAI L ) ;
   331   332   333   334   335   336   337   338   339   340   341