如何在 JavaScript 中创建具有对象属性的对象类
How do I create an object class with object properties in 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 行!
你的第二个例子应该是涵盖你需要的东西。你错的是用法/如何称呼它。
创建C
对象时
C = new OctaveNote("C", 0)
现在,您有一个 OctaveNote
实例,您可以使用构造函数中设置的所有属性访问该实例。
所以你可以通过打电话获得第三个八度
C.thirdOctave.value
应该返回24
.
您的问题是thirdOctave
本身不是一个对象,因此它不能保存属性,例如值。您可以将 Third Octave 转换为包含字符串和值对的对象,也可以简单地将值存储在其自己的单独属性中: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);
等
是的,但它必须是对象而不是字符串。
这将创建一个字符串:this.firstOctave = note + 1;
但是不能将属性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
js小提琴
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性