Показать сообщение отдельно
  #10 (permalink)  
Старый 21.11.2011, 21:12
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

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);
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.

Последний раз редактировалось Nekromancer, 21.11.2011 в 21:20.
Ответить с цитированием