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

Предположим, что свойства этого объекта представляют коэффициенты в мате­
       матическом уравнении. Мы могли бы использовать его так.

       function  evaluate ( x ,   с)  {
           return  с . а  +  с . Ь    *  х  + с  . с  *  Math . p ow ( x ,   2 ) ;


          Пока неплохо". Т е перь мы можем хранить коэффициенты квадратного уравнения
       в объекте и вычислять уравнение для любого значения х. Но что если мы передадим
       объект с недостающими коэффициентами?
       const  coeff icients  =  {
           а :   1 ,
           с :   3 ,
       } ;
       evaluate ( S ,   coefficients )  ;    / /   NaN

                                                             t
          Мы могли бы решить проблему, установив coefficien s . Ь равным  О, но прок­
       си-объекты  предоставляют  нам  лучшую  возможность.  Поскольку они способны
       перехватывать действия с объектом, мы можем гарантировать, что неопределенные
       свойства всегда будут иметь значение О. Давайте создадим прокси-объект для наше­
       го объекта co f ficients.
                   e
       const  betterCoefficients  =  new  Proxy ( c oefficients ,
                   e
           get ( t arg t ,   key)  {
               return  target [ k ey]  1  1    О ;
           } ,
       } )   ;
                  На момент написания  этой  книги  прокси-объекты  не поддержива­
                  лись в Babel. Однако они поддерживаются в текущем выпуске Firefox,
                  и эти примеры кода можно проверить там.
          Первый аргумент конструктора Proxy  - целевой объект  (target), или объект,
       к которому применяется прокси-объект. Второй аргумент  - обработчик (handler),
       который определяет перехватываемые действия. В данном случае мы перехватываем
       только доступ к свойствам, обозначаемый функцией get. Этот процесс несколько от­
       личается от методов доступа к свойствам get . . , поскольку он работает и для обыч­
                                                 .
       ных свойств, и для методов доступа. Функции get передается три аргумента (мы ис­
       пользуем только первые два): целевой объект, ключ свойства (строка или символ)
       и получатель (сам прокси-объект или нечто происходящее от него).
          В этом примере мы просто выясняем, установлен ли ключ на целевом объекте,
       и если не установлен, то возвращаем значение О. Давайте опробуем это.
       betterCoefficien s . a ;    1 1   1
                       t
       betterCoefficient . b ;     1 1   о
                       s
       betterCoefficients . c ;    1 1   3

                                                               Прокси-объекты   347
   339   340   341   342   343   344   345   346   347   348   349