Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Наследование

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

  1. Наследование: ссылка __proto__
  2. Прототип и this
  3. Цепочка прототипов
  4. Установка и чтение прототипа в ES5
  5. Кросс-браузерное наследование
    1. Свойство prototype
    2. Функция inherit для эмуляции Object.create(proto)
    3. Метод hasOwnProperty
    4. Цикл по свойствам с унаследованными и без них
  6. Итого

Наследование — это способ расширения функциональности существующего объекта, без его изменения.

Для этого создаётся новый объект («потомок») и указывается, что он «наследует» от существующего («родителя»).

В дальнейшем, при обращении к свойству потомка, интерпретатор сначала проверяет, есть ли в нём это свойство, и если нет — ищет в родителе. Таким образом получается, что потомок имеет доступ ко всем свойствам родителя, но может добавить к ним свои.

Свойство "constructor"

  1. Свойство constructor
  2. Значение prototype по умолчанию
  3. Потеря constructor
  4. Итого

Свойство constructor, по замыслу, должно быть в каждом объекте и указывать, какой функцией создан объект.

Однако, на практике, оно ведет себя не всегда адекватным образом. Мы рассмотрим, как оно работает и почему именно так.

Оператор "instanceof"

  1. Алгоритм работы instanceof
  2. Когда instanceof не работает?
  3. Итого

Оператор instanceof позволяет проверить, создан ли объект данным конструктором, с учетом наследования.

Наследование на "классах"

  1. Описание объектов через псевдокласс
  2. Наследование
  3. Вызов конструктора родителя
  4. Переопределение метода
    1. Вызов метода родителя после переопределения
    2. Синтаксический сахар: убираем имя родителя
  5. Защищенные и приватные методы
  6. Статические методы и свойства
  7. Использование наследования в коде
  8. Итого

До этого мы рассматривали наследование между объектами: объект rabbit наследует объекту animal.

Но в реальной жизни мы обычно используем функции. Как сделать, чтобы объекты, создаваемые Rabbit наследовали объектам Animal? Мы поговорим об одном из способов, который называют «псевдоклассы» или, для краткости, «классы».

Функциональный паттерн наследования

  1. Функциональный паттерн
  2. Пример: MenuHighlight
  3. Защищенные свойства
  4. Вызов родительского метода из потомка
  5. Итого

Функциональный паттерн не использует prototype и __proto__.

У него есть ряд достоинств и недостатков, которые обычно делают его неподходящим, но иногда — весьма удобным.

Функциональный паттерн без "new"

  1. Создание объекта
  2. Наследование
  3. Особенности

Функциональный паттерн наследования можно реализовать без оператора new.

Обобщение и сравнение паттернов

  1. Функциональный паттерн
    1. Ограничения функцинального паттерна
    2. Достоинства
    3. Недостатки
  2. «Псевдоклассы»
    1. Достоинства
    2. Недостатки
  3. Резюме

Разных ООП-подходов, по-сути, всего два.

В предыдущих статьях было развёрнутое описание, что как и почему. Здесь же они описаны кратко, в целях обобщения и сравнения — когда лучше использовать один или другой.


Комментарии

  1. Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
  2. Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
  3. Комментарии без смысла, с рекламой или не о статье вообще - удаляются.
Наверх

Содержание

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!