Я исхожу из консервативного языка ООП (JAVA) и действительно не понимаю наследование Javascript. Я также шаткий со всей концепцией Prototype, но я видел пример here, который отвечает на мои потребности, но я не понимаю деталей и почему все не так по-другому.Javascript Prototype и inheritance
Принимая их примеру, правильная реализация выглядит следующим образом
function Animal(name) {
this.name = name;
}
// Example method on the Animal object
Animal.prototype.getName = function() {
return this.name;
}
function Mammal(name, hasHair) {
// Use the parent constructor and set the correct `this`
Animal.call(this, name);
this.hasHair = hasHair;
}
// Inherit the Animal prototype
Mammal.prototype = Object.create(Animal.prototype);
// Set the Mammal constructor to 'Mammal'
Mammal.prototype.constructor = Mammal;
Я не понимаю, цель функции Object.call() и я не понимаю, почему Object.create() был использован, а не просто просто Animal.prototype. Также почему конструктор добавляется в последнюю строку? Это потому, что он был удален на предыдущем шаге? И что мне делать, если я хочу использовать код среди всех экземпляров Mammal?
Заранее спасибо
Чтобы ответить на один из ваших вопросов: методы 'call',' 'apply' и bind' из' Object' прототипа являются единственным способом установить 'this' непосредственно при вызове метода. В противном случае 'this' определяется контекстом вызова метода (объект, на который был вызван метод). – rand