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

Наследование является формой повторного использования кода, в которой новые объекты получают доступ к свойствам существующих объектов. Благодаря наследования исключается потребность повторять код и данные в кодовой базе. В языке JavaScript наследование действует насколько иначе, чем в других распространенных объектно-ориентированных языках программирования.

function Person(){} // определить объект типа Person
Person.prototype.dance = function(){};

function Man(){}
Man.prototype = {
    dance: Person.prototype.dance; // попытаться сделать мужчину танцующим человеком
}

const obj1 = new Man();
console.log(obj1 instanceof Man);
console.log(obj1 instanceof Person);
console.log(obj1 instanceof Object);

Данные код потерпит неудачу. Объект типа Man нельзя сделать объектом типа Person. И хотя мужчину можно научить танцевать, как и всякого человека, объект типа Man все равно нельзя сделать объектом типа Person, скопировав соответствующее свойство. Ведь это не наследование, а только копирование.

Такой подход не вполне пригоден, поскольку он предполагает лишь ручное копирование каждого свойства в отдельности из прототипа одного объекта (Person) в прототип другого объекта (Man). Но ведь это не имеет никакого отношения к наследованию. Поэтому продолжим исследование данного вопроса.

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