Наследование на основе прототипов
function Parent() {
this.a = [];
}
Parent.prototype.dd = function() {
console.log('f parent');
};
var aa = new Parent();
function ChildB() {
}
ChildB.prototype = aa;
ChildB.prototype.dd = function() {
console.log('b child');
};
function ChildC() {
}
ChildC.prototype = aa;
ChildC.prototype.dd = function() {
console.log('c child');
};
new ChildB().dd();
new ChildC().dd();
Читая статью о наследовании на основе прототипов я похоже что-то упустил. Подскажите что именно. Ожидалось что в консоле я увижу b child c child А в итоге я получил: c child c child |
Цитата:
Цитата:
У тебя оба child'а в качестве прототипа имеют один и тот же объект. Ты просто перетираешь его свойства. Имена конструкторов принято записывать с большой буквы. |
childB.prototype = new parent(); childC.prototype = new parent(); ; Подумал и подправил. Это правильное решение? |
Цитата:
Корректней будет так: ChildC.prototype = Object.create(Parent.prototype); // по идее еще нужно переопределить свойство constructor Тогда в прототип не попадет свойство a = []. Оно там не нужно. Оно должно быть у каждого инстанса свое. Делается так:
function ChildC() {
Parent.call(this);
}
|
Цитата:
function inherit(proto) {
function F() {}
F.prototype = proto;
return new F;
}
Цитата:
|
Цитата:
Цитата:
|
Цитата:
ChildC.prototype = Object.create(Parent.prototype); При таком подходе получается наследование от Object. Я правильно понимаю? Цитата:
|
Цитата:
Работает примерно как твой inherit. Цитата:
if (!Object.create) {
Object.create = function() { ... };
}
Цитата:
|
| Часовой пояс GMT +3, время: 17:15. |