Рассмотрим эти две версии построения иерархии объектов в JavaScript:Prototype: Разница между этими двумя сценариями
Версия 1
function Employee() {
this.name = "NoName";
this.dept = "NoDept";
};
function Manager() {
Employee.call(this);
this.reports = "Nobody";
}
//Manager.prototype = Object.create(Employee.prototype);
var m = new Manager();
console.log(m.name);
Версия 2
function Employee() {
this.name = "NoName";
this.dept = "NoDept";
};
function Manager() {
//Employee.call(this);
this.reports = "Nobody";
}
Manager.prototype = Object.create(Employee.prototype);
var m = new Manager();
console.log(m.name);
В первом версия, свойство name
доступно, хотя мы не используем p наследование ротипота (конечно, из-за метода call()
). Во второй версии мы комментируем call()
и определяем цепочку прототипов, и все же свойство name
недоступно.
Это оставляет меня интересно, почему, зачем беспокоиться о Manager.prototype
?
Очень хороший ответ! Я думал, что Employee.call (это) имитирует вызов супер() классических объектно-ориентированных языков; следовательно, путаница. Ваш ответ был прозрением! :) – dotslash