如何在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);