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

поскольку нет  ничего,  что  предотвратило бы добавление свойств непосредствен­
       но в прототип, всегда лучше использовать hasOwnProperty, чтобы удостовериться
       в этом. Рассмотрим пример.
       cla ss  Super  {
           constructor ( )    {
               this . narne  =  ' S uper ' ;
               this . i sSuper  =  true ;




       1 1   это  допустимо,  но  не  желательно  .  .  .
       Super . prototype . s neaky  = ' Н е  рекомендуется ! ' ;
       class  Sub  extends  Super
           constructor  )    {
                      (
               super ( ) ;
               this . narne   ' S u ' ;
                             b
               this . i s Sub  =  t r u e ;



       const  obj  =  new  Su ( ) ;
                        b
       for  l et  р  in  obj )  {
          (
           console . l o ( ' $ { p ) :  $ { o bj [ р ] }  '   +
                     g
                ( o bj . hasOwnProperty ( p )   ?   '  (унаследован ) ' ) ) ;
                                                          о
          Если вы запустите эту программу, то увидите
       narne :  Sub
       i s Super :  true
       i s Sub :  true
       sneaky :  Не  рекомендуется !  ( у наследовано)

          Свойства name,  i s Super и i s Sub определяются в экземпляре, а не в  цепи прото­
       типов (обратите внимание, что свойства, объявленные в конструкторе супер класса,
       присутствуют также в экземпляре производного класса). Свойство  sneaky, напро­
       тив, было вручную добавлено в прототип суперкласса.
          Вы можете избежать этой проблемы в целом, используя метод Object . keys, кото­
       рый включает только свойства, определенные в прототипе.


       Строковое предста в ление
                                                                j
          Каждый объект в конечном счете происходит от класса Ob e ct. Таким образом,
       все методы, доступные в классе Obj ect, стандартно доступны для всех объектов.
       Одним из этих методов является toString, возвращающий стандартное строковое


                                         Объектно·ориентирова н ое программирование   1 8 7
                                                         н
   181   182   183   184   185   186   187   188   189   190   191