Наследование на основе прототипов
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, время: 01:17. |