Конспект JS-course

Область применения наследования

Источник: http://learn.javascript.ru/inheritance-intro

Наследование для расширения

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

С другой стороны, пусть у нас есть меню Menu, с простыми методами close(), open() и событием select.

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

Конечно, можно учитывать возрастающие требования и добавлять возможности в функцию-конструктор Menu, но чем дальше, тем более громоздким объект будет становиться, тем сложнее будет продолжать работу с ним, просто потому что возможностей масса, и все они в одном месте.

Если такое меню является частью библиотеки, то разработчик много раз подумает, прежде чем тащить в проект супер-универсальный комбайн с 50 методами, из которых ему нужны только 3. К тому же, работу с универсальным меню очень сложно осваивать, ведь много возможностей — это много документации. Поэтому и было придумано наследование.

При помощи наследования, описываются объекты, наследующие от меню и модифицирующие его поведение. Там, где нужна модификация — используется наследник, там где нет — обычное меню.

Наследование для выноса общего функционала

Второй наиболее частый способ применения наследования — вынос базового функционала «за скобки», в общий родительский класс. Он применяется, в частности, для создания новых компонент.

Например, мы сделали в проекте меню Menu, дерево Tree, вкладки Tabs… И замечаем, что во всех них используются общие методы для работы с документом, элементами.

Наследование позволяет нам вынести эти методы в «базовый компонент» Widget, так что Menu, Tree и другие компоненты расширяют его и получают их сразу.