2013-10-29 157 views
0

我正在寫一個音樂相關的程序,並希望在我的對象中有對象作爲屬性。我知道可以一個一個做,但我想要一條捷徑。這是我想要做的,我知道不行。什麼是正確的方法?可能嗎?如何在JavaScript中使用對象屬性創建對象類?

function OctaveNote(note, value) { 
    this.firstOctave = note + 1.value = value; 
    this.secondOctave = note + 2.value = value + 12; 
    this.thirdOctave = note + 3.value = value + 24; 
} 

或者

function OctaveNote(note, value) {  
    this.firstOctave = note + 1; 
    this.firstOctave.value = value; 
    this.secondOctave = note + 2; 
    this.secondOctave.value = value + 12; 
    this.thirdOctave = note + 3; 
    this.thirdOctave.value = value + 24; 
} 

這樣C = new OctaveNote ("C", 0);讓我知道C3.value = 24和我沒有寫單個對象爲所有11個音符,99行,每倍頻程!

+0

我不確定第一個可以工作。什麼是1.value? –

+1

'C3.value'是什麼意思?你的意思是'C.thirdOctave.value'? – xqwzts

回答

0

是的,但它需要的對象不是字符串。

此創建一個字符串:this.firstOctave = note + 1;

但你不能在propetry value添加到字符串。

所以你需要做的就是創建這樣一個對象:

// Constructor 
function OctaveNote(note, value) { 
    // If we have a note and a value, we add a note. 
    if (typeof note !== 'undefined' && typeof value !== 'undefined') this.addNote(note, value); 
} 

OctaveNote.prototype.addNote = function(note, value) { 
    this[note+1] = value; 
    this[note+2] = value + 12; 
    this[note+3] = value + 24; 
} 

var octave = new OctaveNote("B", 14); 
octave.addNote('C', 2); 
octave.addNote('A', 6); 
console.log(octave.C1); // 2 
console.log(octave.A2); // 18 
console.log(octave.C3); // 26 

jsFiddle

0

你的第二個例子應該是一個涵蓋你所需要的。你錯誤的是使用/如何調用它。

當您使用

C = new OctaveNote("C", 0) 

C對象,你現在有OctaveNote一個實例,你可以在構造函數中設置的所有屬性訪問。

所以,你可以通過調用

C.thirdOctave.value應返回24得到thirdOctave。

這裏你的問題是,thirdOctave本身不是一個對象,因此它不能持有屬性,如值。您可以將thirdOctave轉換爲包含字符串和值對的對象,也可以將您的值存儲在自己的單獨屬性中:thirdOctaveValue

所以,你可以改變功能成類似:

function OctaveNote(note, value) { 
    this.firstOctaveName = note + 1; 
    this.firstOctaveValue = value; 
    this.secondOctaveName = note + 2; 
    this.secondOctaveValue = value + 12; 
    this.thirdOctaveName = note + 3; 
    this.thirdOctaveValue = value + 24; 
} 

然後就可以開始,每注對象:

D = new OctaveNote("D", 20); 
X = new OctaveNote("X", 32); 

,並獲得價值了出來:

console.log(D.firstOctaveValue); 
console.log(X.secondOctaveValue); 

etc