2011-01-15 4 views
1

JavaScriptを使用する親クラスから値を継承するサブクラスを作成するにはどうすればよいですか?継承する必要があるこれらの値は、親クラスのパラメータによって定義されます。親クラスと子クラスの間に1対多の関係が必要です。ここではソングが1つのまたは複数のトラックで構成され、私のコード例は次のとおりです。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

全体のセットアップは、私にはあまり意味がありません。 'Track'を' Song'インスタンスに割り当てる必要がありますか?*何らかの理由でその特定のインスタンスからプロパティを継承する必要がありますか? 'Track'が' Song'のサブクラスであっても、mySongとmySong.guitarはまったく異なる2つのインスタンスです。 –

+1

私は同意します...何か奇妙なここです。 Song()に多くのTrack()オブジェクトを持たせたい場合、Song()には "this.aTracks = new Array();"彼は "mySong.aTracks.push(新しいトラック(何でも)"))することができました。しかし、ここでの目標が何であるかは言うまでもありません。 – Krumelur

答えて

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

私はあなたの2番目の解決策が最も良いことに同意します。各ソングオブジェクトのすべてのトラックを保持する配列を持つことは、私が必要とするものです。そして、あなたは私が組成物であり相続財産ではないことを意味するのは間違いありません。私はまだコンピュータサイエンスについて学ぶことがたくさんある。 – Greg

関連する問題