gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 10:24:44 24 4
gpt4 key购买 nike

如何使用 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时,它返回未定义。我必须在代码中更改哪些内容才能使其正常工作,或者是否有更好的方法来编码这种一对多父/子关系?

最佳答案

所以,看起来您不需要继承,您需要组合。

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

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

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

关于JavaScript 子类 - 如何继承参数中定义的父值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com