如何在JavaScript中创建具有对象属性的对象类?

如何在JavaScript中创建具有对象属性的对象类?,javascript,oop,object,Javascript,Oop,Object,我正在编写一个与音乐相关的程序,希望在我的对象中有对象作为属性。我知道一个接一个是可能的,但我想要一条捷径。这是我想做的,我知道这是行不通的。正确的方法是什么?可能吗 function OctaveNote(note, value) { this.firstOctave = note + 1.value = value; this.secondOctave = note + 2.value = value + 12; this.thirdOctave = note + 3

我正在编写一个与音乐相关的程序,希望在我的对象中有对象作为属性。我知道一个接一个是可能的,但我想要一条捷径。这是我想做的,我知道这是行不通的。正确的方法是什么?可能吗

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


因此
C=新的八维管(“C”,0)
让我知道
C3.value=24
并且我不必为所有11个音符、99行的每个八度音阶编写单独的对象

是,但它必须是对象而不是字符串

这将创建一个字符串:
This.firstOctave=note+1

但是不能将属性
值添加到字符串中

因此,您需要创建一个对象,如:

// 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

第二个例子应该涵盖您需要的内容。你错的是用法/怎么称呼它

使用创建
C
对象时

C = new OctaveNote("C", 0)
现在您有了一个
OctaveNote
实例,您可以使用构造函数中设置的所有属性访问该实例

所以你可以通过打电话得到第三个医生

C.thirdOctave.value
应该返回
24

这里的问题是
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

我不确定第一个是否有效。什么是1.值?你所说的
C3.值是什么意思?你的意思是
C.thirdOctave.value
console.log(D.firstOctaveValue);
console.log(X.secondOctaveValue);