наследование через JavaScript - PullRequest
2 голосов
/ 14 марта 2012

Я экспериментировал с прототипным наследованием javascript и столкнулся с чем-то, что, возможно, можно объяснить.

function dinner(food,drink){
   this.food=food;
   this.drink=drink;

}
dinner.prototype.desert=function(){
var x = this.food;

return x.split(' ')[0]+' Ice Cream Float';
}
function superSupper(steak){
    this.steak=steak;
}
superSupper.prototype= new dinner();
superSupper.prototype.constructor=superSupper;
var x = new superSupper('corn','beet juice')
x.grub='beef';
x.clams = 'nope';

В приведенном выше коде я создаю нового конструктора "superSupper" и заставляю его наследоваться от ужина. когда это просматривается в console.log, я вижу это:

superSupper
clams: "nope"
grub: "beef"
steak: "corn"
__proto__: dinner
constructor: function superSupper(steak){
drink: undefined
food: undefined
__proto__: dinner

как получить доступ к напиткам и свойствам пищи, которые я унаследовал от ужина?

p.s. пробуя это: "x.food = 'some string'" только создает новое свойство в экземпляре superSupper под названием food, но не присваивает значение унаследованному свойству food.

1 Ответ

5 голосов
/ 14 марта 2012

Вы должны немного изменить свой superSupper:

function superSupper(steak){
    // calling superclass constructor
    dinner.apply(this, arguments);
    this.steak=steak;
}
...