«Единственный способ творить великие дела – это любить то, что ты делаешь»
JavaScript
site.komp36.ru Создание сайтов. Твой сайт фотографа Что есть на сайте? Несколько фото галерей: свадебная, постановочная съемка, love story, детские фото. Договор на фотосъемку, прайс-лист.
site.komp36.ru Продающий лендинг. Создание сайтов Установка и продажа окон, установка дверей, перегородок. Одностраничный продающий сайт. Заявки прямо с сайта
site.komp36.ru Универсальный лендинг. Выбрать тему для сайта! Лендинг адаптируется под любую тему: ремонт, отделка, продажа окон, дверей, лестниц, мебели и многое другое
site.komp36.ru Создание сайтов. Сайт сервисного центра. Сайт компании. Новости и отзывы. Несколько прайс-листов – под каждый отдельная страница. Возможность размещения статей


Игра «Морской Бой» на JavaScript: Простая Игра и Игра для Двоих



Эта статья является продолжением предыдущей: Прототипное программирование - Прототип и экземпляр объекта.

Здесь рассмотрим, как работать с прототипами и как осуществляется связь экземпляра объекта с прототипом объекта.

Примеры работы со свойством __proto__ и методами Object.create() и Object.setPrototypeOf().



Пример работы с прототипами

Пример работы с прототипами.

Сначала рассмотрим устаревший способ связи Экземпляра с Прототипом: через свойство __proto__. Но этот способ еще может встречаться, поэтому о нем нужно знать.

Пример 1.1

// Прототип "Солдат"
const soldier = {
    helth: 500,
    armor: 200
};

// Экземпляр прототипа "Джон"
const jonh = {
    helth: 300
};

// Связь Экземпляра с Прототипом
jonh.__proto__ = soldier;

console.log(jonh.armor);

Результат


200

1. Есть Прототип Объекта "Солдат" со свойствами: здоровье и броня.

2. Есть Экземпляр прототипа - Объект "Джон" с одним свойством: здоровье.

3. Устанавливаем связь Экземпляра с Прототипом при помощи свойства proto: благодаря этому Экземпляр получает от Прототипа значение недостающего свойства jonh.armor.

Итак, Экземпляр прототипа может получать от Прототипа значения тех свойств, которых у него нет, но которые есть у Прототипа.

Также Экземпляр прототипа может выполнять действия, то есть использовать методы, которыми обладает Прототип.

Пример 1.2

// Прототип "Солдат"
const soldier = {
    helth: 500,
    armor: 200,
    sayHello: function(){
        console.log('Hello');
    }
};

// Экземпляр прототипа "Джон"
const jonh = {
    helth: 300
};

// Связь Экземпляра с Прототипом
jonh.__proto__ = soldier;

jonh.sayHello();

Результат


Hello

Свойства proto - устаревший способ

Ипользование свойства __proto__ - это устаревшая модель кодирования. Сейчас нужно использовать методы Object.create(), Object.getPrototypeOf и Object.setPrototypeOf. Подробнее об этом читайте здесь и здесь.

Метод Object.create() - создает объект-экземпляр с указанием объекта-прототипа.

Метод Object.getPrototypeOf - получает прототип.

Метод Object.setPrototypeOf - устанавливает прототип.

Метод Object.setPrototypeOf

Вернемся к примеру 1.2 и заменим фрагмент кода jonh.__proto__ = soldier; современным вариантом связи объекта-экземпляра с обектом-прототипом.

Пример 2.1

// Прототип "Солдат"
const soldier = {
    helth: 500,
    armor: 200,
    sayHello: function(){
        console.log('Hello');
    }
};

// Экземпляр прототипа "Джон"
const jonh = {
    helth: 300
};

// Связь Экземпляра с Прототипом
Object.setPrototypeOf(jonh, soldier);

jonh.sayHello();

Результат


Hello

Итак, метод Object.setPrototypeOf устанавливает прототип для экземпляра и имеет два параметра: 1-ый - объект-экземпляр и 2-ой - обект-прототип.

Таким образом, метод Object.setPrototypeOf устанавливает связь Экземпляр <--> Прототип.

Запись Object.setPrototypeOf(jonh, soldier) звучит так: устанавливаем прототип для jonh от soldier (прототип для Джона - от Солдата).

Метод Object.create()

В примере 2.1 сначала создавался объект-экземпляр jonh, потом устанавливалась его связь с обектом-прототипом soldier.

В основном на практике, при помощи метода Object.create() наследование от обекта-прототипа происходит сразу - на этапе создания объекта-экземпляра.

Как это выглядит?

Пример 3.1

// Прототип "Солдат"
const soldier = {
    helth: 500,
    armor: 200,
    sayHello: function(){
        console.log('Hello');
    }
};

// Создание экземпляра и его связь с прототипом
const jonh = Object.create(soldier);

jonh.sayHello();

Результат


Hello

Запись const jonh = Object.create(soldier) звучит так: создаем новый объект jonh, который прототипно наследуется от soldier.

При этом объект jonh еще не имеет собственных свойств и методов, но может наследовать их от soldier.

Итак, мы рассмотрели, как работают методы Object.create() и Object.setPrototypeOf().

О методе Object.getPrototypeOf() речь будет идти позже.

Информация данная на предыдущей и текущей страницах - это только начало знакомства с парадигмой объектно-ориентированного программирования. Этот стиль программирования осваивается постепенно. Следует помнить, что ООП - это наука о том, как делать правильную архитектуру.

Из этого материала, следует усвоить, что JavaScript также является Прототипноо Ориентированным языком программирования: это частный случай ООП (один из его стилей). В этой статье мы это и увидели, что многое в JavaScript строится на прототипах.

Читайте также...

site.komp36.ruТвой сайт фотографа. Создание сайтов Что есть на сайте? Несколько фото галерей: свадебная, постановочная съемка, love story, детские фото. Договор на фотосъемку, прайс-лист.
site.komp36.ru Акция Как начать свое дело? Свой сайт «Укладка плитки» 9 000 руб. Лендинг адаптируется под любой вид отделочных работ, продажу товаров или услуг. Сайт поможет найти новых клиентов
site.komp36.ru Акция Продающий лендинг «Установка и продажа окон» 9 000 руб. Одностраничный продающий сайт. Установка и продажа окон, установка дверей, перегородок. Заявки прямо с сайта

Отзывы и комментарии:

Комментариев нет...

Оставить отзыв:

Ваше Имя:

Текст комментария:

Ответьте на вопрос:

Сколько дней в Високосном году?


Рунет - Часть 2
Свойство proto - Методы Object.create и Object.setPrototypeOf
722
Условия if else - Конструкция switch case - Тернарный оператор
715
Циклы while и for - Операторы break и continue
943
Практика часть 2 – Циклы и Условия
4568
Объявление функций – Стрелочные функции ES6
1147
Методы и свойства строк и чисел - Метод substr - Индекс строки
567
Практика часть 3 - Используем функции
1515
Что такое callback-функция - Аргумент другой функции
2219
Свойства и методы объектов - Деструктуризация объектов ES6
2877
Методы массивов - Перебор элементов массива - Псевдомассивы
2177
Передача данных по ссылке и по значению – Клонирование объекта
532
Метод assign() – Копирование исходных объектов в целевой объект
590
Копирование массивов - Оператор spread
2023
Прототипное Программирование - Прототип и Экземпляр Объекта
522
Практика часть 4 - Используем функции как методы объекта
10989
Тематические публикации
site.komp36.ru Как начать свое дело? Свой сайт «Укладка плитки» 9 000 руб. Лендинг адаптируется под любой вид отделочных работ, продажу товаров или услуг. Сайт поможет найти новых клиентов
site.komp36.ru Продающий лендинг «Установка и продажа окон» 9 000 руб. Одностраничный продающий сайт. Установка и продажа окон, установка дверей, перегородок. Заявки прямо с сайта
Популярные заметки
Последние заметки