Показать сообщение отдельно
  #1 (permalink)  
Старый 13.09.2012, 12:02
Аспирант
Отправить личное сообщение для bFree Посмотреть профиль Найти все сообщения от bFree
 
Регистрация: 19.08.2008
Сообщений: 42

Прототипное наследование
Здравствуйте!
Понадобилось реализовать наследование на прототипах (до этого обходился без него), прочитал учебник, но, честно говоря, запутался.

Опишу, что я пытался сделать:

// Базовый класс
        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() !!, но я же переопределил его?

Собственно не исключаю, что я вообще неправильно использую механизм.
Я понимаю прототипное наследование как "взял объект, похожий на тот, который нужен, переделал в нем пару методов и используешь", что отличается от стандартного классового подхода, где нужно стараться выстраивать иерархию классов.

Помогите, пожалуйста
Ответить с цитированием