使用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。我需要在代码中进行哪些更改才能使其工作,或者有更好的方法来编写这种一对多的父/子关系?
答案 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;
}