Здравствуйте!
Понадобилось реализовать наследование на прототипах (до этого обходился без него), прочитал учебник, но, честно говоря, запутался.
Опишу, что я пытался сделать:
// Базовый класс
function Animal() {
this.init();
}
Animal.prototype.init = function() {;
this.bar = "bar";
};
Animal.prototype.foo = function() {
console.log(this.bar);
};
// Класс, меняющий поведение базового
function Rabbit() {
this.init();
}
Rabbit.prototype.foo = function() {
console.log(this.bar, "rabbit");
};
// Использую ф-цию extend
function extend(Child, Parent) {
var F = function() { }
F.prototype = Parent.prototype
Child.prototype = new F()
Child.prototype.constructor = Child
Child.superclass = Parent.prototype
}
// Наследуем
extend(Rabbit, Animal);
var animal = new Animal();
var rabbit = new Rabbit();
animal.foo();
rabbit.foo(); // Вызывается Animal.prototype.foo() !!, но я же переопределил его?
Собственно не исключаю, что я вообще неправильно использую механизм.
Я понимаю прототипное наследование как "взял объект, похожий на тот, который нужен, переделал в нем пару методов и используешь", что отличается от стандартного классового подхода, где нужно стараться выстраивать иерархию классов.
Помогите, пожалуйста