Другое

Прототипное программирование и прототипное наследование: что это?

Lorem ipsum dolor

Прототипное программирование и прототипное наследование часто применяют в JavaScript, как альтернативу классическому объектно-ориентированному программированию, реализованному в С или Java. В классическом ООП сначала создается класс, как некий образец для дальнейшей работы с ним, потом на основе данного класса-образца создается объект. Когда нужно создать более унифицированный тип объекта, тогда создается потомок класса-образца, то есть в сам образец вносятся какие-то изменения, а потом этот измененный образец-прототип применяется для выстраивания необходимых нам объектов.

Если перенести ООП в реальную жизнь людей, то перед тем, как создать обеденный стол, сначала его чертят на ватмане, а потом на основе этого чертежа уже изготавливают сам обеденный стол. Чертеж на бумаге — это класс, а обеденный стол это ни что иное, как сам  объект. Если вдруг вздумается реализовать компьютерный стол, тогда есть возможность внести соответствующие корректировки в чертеж обеденного стола и потом, взяв за основу новый чертеж, мы можем создать компьютерный стол.

 

Прототипное программирование и прототипное наследование в Джава Скрипт

Давайте мысленно и плавно перенесемся в прототипное программирование в Java Script. Мы увидим, что тут вообще не создаются классы или «чертежи», здесь сразу создается объект. То есть вы покупаете материал, берете в руки молоток, пилу и гвозди и создаете себе обеденный стол. У вас получится стол, который будет полноценным столом, но при этом он будет служить еще и основой для создания новых столов. По сути, если вы захотите сделать компьютерный стол, то вы клонируете уже сделанный обеденный стол, потому к нему добавляете полочки и подставку под «системник», и у вас получается полноценный компьютерный стол.

 

Прототипное программирование и наследие в JavaScript на примере

Прототипное программирование в JavaScript можно легко разобрать и понять на следующем примере. Для начала проектируем некий объект «Cars»:

var genericCars = Object.create(null);

 

Далее к нашему пустому объекту «Object.create(null)» добавляем некоторый набор свойств и функций:

genericCars.name =  "Жигули" ;

genericCars.color =  "Синий" ;

genericCars.description = function() {

return  Цвет:  + this.gender +  ; Модель:  + this.name;

};

 

Наш «genericCars» это объект, который мы сможем эксплуатировать и просмотреть его описание в консоли, например:

console.log(genericCars.description());

// Цвет: Синий;  Модель: Жигули

 

Мы также сможем создавать различные автомобили, применяя созданный объект и прототипное программирование в JavaScript, как мы уже говорили, что сам процесс этот напоминает процесс «клонирования»:

var jeep = Object.create(genericCars);

 

Мы только что спроектировали Джип, при этом фактически мы просто клонировали наш объект автомобиля. Теперь давайте добавим ему какие-нибудь свойства и функции:

jeep.maxSpeed = function() {

return  "380 км/ч" ;

};

 

На этом еще не все, теперь мы сможем взять наш Джип  и клонировать его в другие автомобили:

var niva = Object.create(jeep);

niva.name =  "ВАЗ 2121" ;

var zaz = Object.create(jeep);

zaz.name =  "Запорожец" ;

 

Теперь внимание! Все наши созданные новые объекты (автомобили) наследуют свойства от родительского объекта, если данные свойства не были изменены. Именно так работает прототипное наследие в JavaScript. Например, если мы вызовем один из «новых» автомобилей:

console.log(zaz.description());

 

То получим следующий результат:

Цвет: Синий; Модель: Запорожец

 

Заключение

Прототипное программирование и наследие в JavaScript работает по принципу «клонирования». То есть, создавая прототип по уже созданному объекту, мы получаем новый объект, который наследует все свойства от родительского, пока мы их не поменяем.

Схожие статьи

DigitalOcean хостинг и его аналоги: что это, функции и особенности
Другое

DigitalOcean хостинг и его аналоги: что это, функции и особенности

Whitespace: язык программирования с самым необычным синтаксисом
Другое

Whitespace: язык программирования с самым необычным синтаксисом

Анимация загрузки страницы в CSS и GIF: назначение, как создать и примеры
Другое

Анимация загрузки страницы в CSS и GIF: назначение, как создать и примеры

Дебатер — это последнее слово искусственного интеллекта или нет?
Другое

Дебатер — это последнее слово искусственного интеллекта или нет?

×