【问题标题】:How do I create an object class with object properties in JavaScript?如何在 JavaScript 中创建具有对象属性的对象类?
【发布时间】:2013-10-29 00:14:06
【问题描述】:

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

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 行的每个八度写单独的对象!

【问题讨论】:

  • 我不确定第一个是否可行。什么是 1.value?
  • C3.value 是什么意思?你的意思是C.thirdOctave.value

标签: javascript oop object


【解决方案1】:

您的第二个示例应该涵盖您需要的内容。你错的是用法/如何调用它。

当您创建 C 对象时

C = new OctaveNote("C", 0)

您现在有一个OctaveNote 的实例,您可以使用在构造函数中设置的所有属性来访问它。

所以你可以通过调用获得第三个Octave

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

【讨论】:

    【解决方案2】:

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

    这会创建一个字符串: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
    

    jsFiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多