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

Примеси не устраняют проблему коллизий: если бы по каким-то причинам стра­
       ховая группа должна была бы создать в своей примеси метод shift, то это наруши­
       ло бы класс Car. Кроме того, мы не можем использовать instanceof для выявления
       объектов, которые допускают страхование: в лучшем случае мы можем рассчитывать
       на утиную типизацию (если у объекта есть метод addinsurancePolicy, он, вероятно,
       подлежит страхованию).
          Мы можем сгладить некоторые из этих проблем, используя  символы. Скажем,
       страховая группа постоянно добавляет очень обобщенные методы, которые  кон­
       фликтуют с методами класса Car. Вы могли бы попросить их использовать для всех
       своих ключей символы. Теперь их примесь будет выглядеть следующим образом.

       class  InsurancePolicy ( )    { }
       const  ADD_POLICY  =  SymЬol ( ) ;
       const  GET_POLICY  =  SymЬol ( ) ;
       const  I S _INSURED  =  SymЬol ( ) ;
       const  POLICY  =  SymЬol ( ) ;
       function  makeinsuraЬle ( o )    {
           o  [ ADD_POLICY]   function ( p )    {  this [  POLICY]  =  р ;   }
           o  [ GET_POLICY]   function ( )    {  return  this [  POLICY] ;
                              t
           o  [ I S   INSURED]   func i on ( )    {  return  !  ! t his [  POLIC ] ;
                                                          Y
          Поскольку символы уникальны, это гарантирует, что примесь никогда не будет
       конфликтовать с существующими функциями класса Car. В использовании это мо­
       жет быть немного неуклюже, но намного безопаснее. Компромиссный подход, воз­
       можно, подразумевал бы использование обычных строк для методов, а символов (та­
       ких, как  POL C Y) для свойств данных.
                   I
       За к  люч е н и е

          Объектно-ориентированное программирование - это чрезвычайно популярная
       парадигма и на то есть серьезные причины. Оно обеспечивает организацию и инкап­
       суляцию кода для решения многих реальных задач, что облегчает поддержку, отлад­
       ку и исправление ошибок. Реализацию ООП в JavaScript серьезно  критикуют - не­
       которые доходят до утверждения, что JavaScript даже не соответствует определению
       объектно-ориентированного языка (обычно из-за нехватки контроля доступа к дан­
       ным). Этот аргумент заслуживает внимания, но как только вы привыкнете к тому,
       как в JavaScript реализовано ООП, вы найдете этот язык весьма гибким и мощным.
       Он  позволяет делать такие  вещи,  на которые другие объектно-ориентированные
       языки не способны.







       1 9 0    Глава 9. Объекты и объектно-ориентированное программирование
   184   185   186   187   188   189   190   191   192   193   194