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

class  Car  {
           static  getNextVin ( )
               return  Car . nextVin++;  // мы  могли  бы  также  использовать
                                    //  this . nextVin++,  но  обращение  к  Car
                                    / /  подчеркивает,  что  это  статический  метод

                                l
           constructor (make ,  mode )
               this . m ake  =  make ;
               th s . m odel  =  mod l ;
                              e
                 i
               this . vin  =  Car . getNextVin ( ) ;
           static  areSimilar ( c arl ,   ca 2 )    {
                                    r
               return  carl . m ake===car2 . m ake  &&  carl . m odel===car2 . m od l ;
                                                                  e
                         (
           static  areSame  c arl ,  car2 )  {
               return  carl . vin===car2 . v in;

       Car . nextVin  =  О ;

                                a
       const  carl   new  Car ( " Tesl " ,   " S " ) ;
       const  car2   new  Car ( "Mazda" ,   " 3 " ) ;
       const  car3   new  Car ( "Mazda" ,   " 3 " ) ;
         r
       ca l . vin;   / /   О
       car2 . v in;   / /   1
       car3 . v in   //  2
       Car . areSimilar ( c a r l ,   car2 ) ;   1 1   fa lse
       Car . areSimilar ( c ar2 ,  car3 ) ;   1 1   true
       Car . areSame ( c ar2 ,  car3 ) ;   1 1   false
       Car . areSame ( c ar2 ,  car2 ) ;   1 1   true
       Наследо в а н и е

          Рассматривая прототипы, мы уже встречали некий вид наследования: при созда­
       нии экземпляра класса он наследовал все функции, находящиеся в прототипе класса.
       Но на этом дело не заканчивается: если метод не найден в прототипе объекта, прове­
       ряется прототип прототипа. Так получается цепь прототипов. JavaScript будет идти
       по цепи прототипов, пока не найдет тот прототип, который удовлетворяет запросу.
       Если такой прототип не будет найден, то все закончится ошибкой.
          Это пригодится при создании иерархии классов. Мы уже упоминали, что авто­
       мобиль - это общий тип транспортного средства. Цепь прототипов позволяет рас­
       полагать функции  там, где им самое место. Например, у автомобиля  мог бы быть
       метод deployAirbags. Мы могли бы сделать его методом обобщенного транспорт­
       ного средства, но вы когда-либо видели лодку с подушками безопасности? С другой
       стороны, почти все транспортные средства могут перевозить пассажиров; таким об­
                                                            s
       разом, у транспортного средства мог бы быть метод addPa s e nger (который мог бы

       184     Глава 9. Объекты и объектно-ориентирован н ое программирование
   178   179   180   181   182   183   184   185   186   187   188