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

JavaScript поддерживает наследование, когда при создании новых типов объектов необходимо унаследовать их функционал от уже существующих.
Например:
объект User, представляющий отдельного пользователя. И также может быть объект Employee, который представляет работника. Но работник также может являться пользователем и поэтому должен иметь все его свойства и методы. Например:


Здесь в начале определяет конструктор User и к его прототипу добавляется свойство maxage. Затем определяется тип Employee.

В конструкторе Employee происходит обращение к конструктору User с помощью вызова: User.call(this, name, age); Передача первого параметра позволяет вызвать функцию конструктора User для объекта, создаваемого конструктором Employee. Благодаря этому все свойства и методы, определенные в конструкторе User, также переходят на объект Employee.

Кроме того, необходимо унаследовать также и прототип User. Для этого служит вызов:

Employee.prototype = Object.create(User.prototype);

Метод Object.create() позволяет создать объект прототипа User, который затем присваивается прототипу Employee. При этом при необходимости в прототипе Employee мы также можем определить дополнительные свойства и методы.

При наследовании мы можем переопределять наследуемый функционал. Например, Employee переопределяет метод displayInfo(), унаследованный от User, чтобы включить в вывод этого метода новое свойство company.

В итоге браузер предоставит следующий вывод:
Output