Подкласс JavaScript - как наследовать родительские значения, определенные в параметре? - PullRequest
1 голос
/ 16 января 2011

Используя JavaScript, как мне создать подкласс, который наследует значения из родительского класса?Эти значения, которые мне нужно унаследовать, определяются параметрами родительского класса.Я хочу иметь отношение один-ко-многим между родительским классом и дочерним классом.Вот мой пример кода, где песня состоит из одного или нескольких треков:

function Song(x){
  this.x = x;
}

function Track(y){
  Song.call(this);
  this.y = y;
}

Track.prototype = new Song;


var mySong = new Song(1);
mySong.guitar = new Track(2);
mySong.bass = new Track(3);
// goal is to output "1 1 2 3" but currently outputs "undefined undefined 2 3"
console.log(mySong.guitar.x + " " + mySong.bass.x + " " + mySong.guitar.y + " " + mySong.bass.y );  

Этот вопрос похож на этот вопрос подкласса (/877093/podklass-javascript-obekta), но использует переменные, определенные параметрами. Прямо сейчас, когда я пытаюсьчтобы вызвать parentObject.childObject.parentVariable, он возвращает неопределенное значение. Что мне нужно изменить в коде, чтобы сделать эту работу, или есть лучший способ кодировать это отношение один-ко-многим родитель / потомок?

1 Ответ

0 голосов
/ 16 января 2011

Итак, похоже, вы не хотите наследования, вам нужна композиция.

Я постараюсь найти хорошую ссылку.

Я не сделал 'Я не могу найти хороших ссылок, и когда я посмотрел на ваш код больше, я запутался.Вот что-то, что выполняет то, что вы хотите, но я не уверен, что это действительно полезно, особенно потому, что оно делает несколько вещей, которые я бы обычно не рассматривал.

function Song(x){
  this.x = x;
  this.tracks = [];
}

Song.prototype.addTrack = function(track) {
  this.tracks.push(track);
}

Song.prototype.output = function() {
   // loop on this.tracks and output what you need using info from 'this' and 
   // each track
}


function Track(y){
  this.y = y;
}
...