Page 182 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 182
1 1 определенный ранее класс Car с методом shift
const carl = new Ca ( ) ;
r
const car2 = new Ca ( ) ;
r
carl . shift === Car . prototype . s hift ; / / true
carl . shift ( D ' ' ) ;
'
carl . shift ( d ' ) ; 1 1 ошибка
carl . userGear ; / / 'D '
carl . s hift === car2 . s hift 1 1 true
carl . s hift = function ( g ear) this . userGear gear . t oUpperCase ( ) ; }
r
carl . shift === Ca . prototype . s hift ; / / false
carl . s hift === car2 . s hift ; / / false
carl . shift ( ' d ' ) ;
carl . userGear ; / / 'D '
В этом примере ясно показано, как JavaScript осуществляет динамический вызов.
'
r
Первоначально у объекта carl нет метода shift, но при вызове ca l . shift ( D ' )
JavaScript просматривает прототип для carl и находит метод с таким именем. Когда
мы заменяем метод shift собственной версией, то у объекта carl и у его прототипа
'
появляется метод с этим именем. Однако при вызове carl . shift ( d ' ) , будет вызван
метод объекта carl, а не его прототипа.
Обычно в знании механики цепи прототипов и динамического вызова у вас не
будет особой нужды, но все же может встретиться проблема, которая потребует их
глубокого понимания. Поэтому, прежде чем продолжать, имеет смысл узнать детали.
Статические методы
Методы, которые мы рассматривали до сих пор, являлись методами экземпляра
(instance method). Они предназначены для работы с конкретным экземпляром. Есть
также статические методы (static method) (или методы класса (class method)), кото
рые не относятся ни к какому конкретному экземпляру. В статическом методе пере
менная this привязана к самому классу, но в этом случае вместо нее рекомендуется
использовать имя класса.
Статические методы используются для выполнения обобщенных задач, которые
связаны с классом, а не с любым конкретным экземпляром. Давайте рассмотрим
пример использования VIN автомобиля (идентификатор транспортного средства).
Нет смысла позволять индивидуальному автомобилю создавать собственный VIN:
что помешало бы автомобилю использовать такой же VIN, как и у другого автомо
биля? Однако присвоение VIN является абстрактной концепцией, которая связа
на с идеей автомобиля вообще; следовательно, это кандидат в статические методы.
Кроме того, статические методы зачастую используются для работы с несколькими
транспортными средствами (объектами). Например, нам может понадобиться метод
t
areSirnilar, который возвращает r ue, если у двух автомобилей те же марка и мо
дель, а метод areSarne, возвращающий r ue, если у двух автомобилей один и тот же
t
VIN. Давайте рассмотрим эти статические методы, реализованные для класса Car.
Объектно-ориентированное программирование 1 8 3

