JavaScript子类 - 如何继承参数中定义的父值?

时间:2011-01-15 21:01:47

标签: javascript class inheritance parent

使用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 );  

此问题类似于此子类问题(http://stackoverflow.com/questions/1204359/javascript-object-sub-class),但使用参数定义的变量。现在,当我尝试调用parentObject.childObject.parentVariable时,它返回undefined。我需要在代码中进行哪些更改才能使其工作,或者有更好的方法来编写这种一对多的父/子关系?

1 个答案:

答案 0 :(得分:0)

所以,看起来你不想要继承,你想要合成。

我会尝试找到一个好的链接。

我没有找到任何好的链接,当我更多地查看你的代码时,我更加困惑。这是完成你想要的东西,但我不确定它是否真的有用,特别是因为它做了一些我通常不会考虑的事情。

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

Song.prototype.addTrack = function(name, track) {
  this[name] = track;
  track.x = this.x;
}

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


var mySong = new Song(1);
mySong.addTrack('guitar', new Track(2));
mySong.addTrack('bass', new Track(3));

console.log(mySong.guitar.x + " " + mySong.bass.x + " " + mySong.guitar.y + " " + mySong.bass.y );

在我看来,更好的解决方案是:

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;
}