Когда вы создаете новый экземпляр с вашим конструктором, например,
const teacher = new Teacher();
, JS делает следующее под капотом:
1) Создает новый объект, который наследует конструкторы prototype
property
2) Вызывает конструктор с this
новым объектом:
const teacher = Object.create(Teacher.prototype); // 1
Teacher.call(teacher); // 2
Теперь, если вы хотите, чтобы учитель унаследовал все методы и свойства Person, у вас естьTeacher.prototype
наследовать Person.prototype
, поскольку экземпляры наследуют это.Итак, это:
teacher -> Teacher.prototype
teacher2 ->
должно быть изменено на
teacher -> Teacher.prototype -> Person.prototype
teacher2 ->
, поэтому прототип учителя должен наследовать прототип лиц.
Teacher.prototype = Object.create(Person.prototype);
Другая строка однако:
Teacher = Object.create(Person);
Не имеет особого смысла, поскольку это разрушает конструктор Учителя, поскольку Object.create
возвращает объект, а не функцию.Однако вы можете:
Object.setPrototypeOf(Teacher, /*to*/ Person);
Тогда Teacher
унаследует все статические свойства Person
, но экземпляры не будут наследовать ничего, так как Teacher.prototype
не наследует Person.prototype
.