2011-01-15 2 views
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

전체 설치 나에게 많은 이해가되지 않습니다 :

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

더 나은 솔루션이 될 것이라고 나에게 보인다. 왜'Track'가'Song' 인스턴스에 할당되어야하고 * 어떤 식 으로든 그 인스턴스로부터 속성을 상속 받아야합니까? 'Track'이'Song'의 서브 클래스 인 경우에도 mySong과 mySong.guitar는 전혀 다른 경우입니다. –

+1

동의합니다 ... 뭔가 이상합니다. song()에 많은 Track() 객체가 있기를 원하면 Song()에 "this.aTracks = new Array();"가 있어야합니다. 그는 "mySong.aTracks.push (새로운 트랙 ("뭐든간에 "))"할 수있었습니다. 그러나 여기에 목표가 무엇인지 말하기는 어렵습니다. – Krumelur

답변

0

그래서 상속을 원하지 않는 것처럼 보입니다. 원하는 것은 구성입니다.

나는 좋은 연결 고리를 찾으려고 노력할 것입니다.

나는 좋은 링크를 찾지 못했고 코드를 자세히 보았을 때 혼란스러워졌습니다. 여기 당신이 원하는 것을 이루는 것이 있습니다 만, 나는 그것이 일반적으로 고려하지 않을 몇 가지 일을하기 때문에 특히 유용하다는 것을 확신하지 못합니다.

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

두 번째 해결 방법이 가장 좋음에 동의합니다. 각 Song 객체의 모든 트랙을 보유 할 수있는 배열이 필요합니다. 그리고 당신은 내가 구성과 상속이 아니라는 것을 의미하는 것이 옳습니다. 나는 아직도 컴퓨터 과학에 대해 배울 점이 많다. – Greg

관련 문제