Snipe,
Ну видимо, тут дело в том, что для того, что бы расширять уже существующие объекты, нудно расширять прототип, а не заменять его. Заменяя прототип, вы фактически создаёте новый класс. Берём ваш пример и смотрим:
function Animal(name) {
this.name = name
this.canWalk = true
}
function Rabbit(name) {
this.name = name
}
big = new Rabbit('Chuk')
Rabbit.prototype = new Animal("скотинка");
small = new Rabbit('Gek')
alert(big instanceof Rabbit)
alert(small instanceof Rabbit)
По хорошему конечно, наследование нужно организовывать приблезительно так:
var create = Object.create || (Object.create = function(proto){
var constructor = function(){};
constructor.prototype = proto;
return new constructor;
}), inherit = function(childHandler, parent){
var child = function(){
parent.apply(this, arguments);
childHandler.apply(this, arguments);
};
child.prototype = create(parent.prototype);
child.prototype.__parent__ = parent;
return child;
}
var A = function(){
this.foo = 1;
},
B = inherit(function(){
this.bar = 2;
}, A),
c = new B();
alert(c instanceof B);
alert(c instanceof A);