Javascript 将代码转换为JS对象文字模式

Javascript 将代码转换为JS对象文字模式,javascript,oop,audiocontext,Javascript,Oop,Audiocontext,我想开始编写更好的代码,并且我逐渐明白,将与特定功能相关的所有内容都放在对象中是一个好主意 编辑:我试图在@SoftwareEngineer171的回答中理解这个概念。现在我有这个: var app = { audioCtx : new(window.AudioContext || window.webkitAudioContext)(), init : function () { oscillator = app.audioCtx.createOscillat

我想开始编写更好的代码,并且我逐渐明白,将与特定功能相关的所有内容都放在对象中是一个好主意

编辑:我试图在@SoftwareEngineer171的回答中理解这个概念。现在我有这个:

var app = {
    audioCtx : new(window.AudioContext || window.webkitAudioContext)(),

    init : function () {
        oscillator = app.audioCtx.createOscillator();
        oscillator.type = 'square';
        oscillator.frequency.value = 3000; // value in hertz
        oscillator.start();
    }
} // app object close

app.init();
但它不起作用。有人能解释为什么吗

我想将此代码用作应用程序的一部分,但放在对象文字中:

var context = new AudioContext(), 
    gainNode = context.createGain(), 
    oscillator = context.createOscillator();

gainNode.connect(context.destination);
oscillator.frequency.value = 440;
oscillator.connect(gainNode);
oscillator.start();
然而,当我尝试时,我遇到了上述那种问题

我希望代码以如下方式开始:

var app = {
    context : new AudioContext(),
    ...
}

非常感谢您一如既往的帮助。

您尝试做的不是一项特定的功能,但您可以通过多种方式来完成。例如,如果要编写以下对象

var obj = {
    a: 5,
    b: 7,
    c: a + b
};
它将抛出一个
ReferenceError
。为了避免这种情况,请按如下所示重写语法

var obj = {
    a: 5,
    b: 7,
    init(){
        this.c = this.a + this.b;
        return this;
    }
}.init();
您也可以使用类来完成它

var obj = new class{
    constructor(){
        this.a = 5;
        this.b = 7;
        this.c = this.a + this.b;
    }
}();
甚至使用构造函数

var obj = new function(){
    this.a = 5;
    this.b = 7;
    this.c = this.a + this.b;
}();
编辑

在您的情况下,音频上下文脚本如下所示(另请参见):


您试图做的并不是一项特定的功能,但可以通过几种方式来实现。例如,如果要编写以下对象

var obj = {
    a: 5,
    b: 7,
    c: a + b
};
它将抛出一个
ReferenceError
。为了避免这种情况,请按如下所示重写语法

var obj = {
    a: 5,
    b: 7,
    init(){
        this.c = this.a + this.b;
        return this;
    }
}.init();
您也可以使用类来完成它

var obj = new class{
    constructor(){
        this.a = 5;
        this.b = 7;
        this.c = this.a + this.b;
    }
}();
甚至使用构造函数

var obj = new function(){
    this.a = 5;
    this.b = 7;
    this.c = this.a + this.b;
}();
编辑

在您的情况下,音频上下文脚本如下所示(另请参见):


为什么?目的何在?“将与特定功能相关的所有内容放在对象中是个好主意”-不,不是。至少不是一般的。你还打算在哪里使用这三个变量中的任何一个?这是你的全部密码吗?你认为你会从一个
应用程序
对象中获得什么?我想使用一个应用程序对象,因为给出的代码只是一个更大的应用程序中很小但很重要的一部分。我试图遵循一些关于模块化编码的想法,例如:为什么?目的何在?“将与特定功能相关的所有内容放在对象中是个好主意”-不,不是。至少不是一般的。你还打算在哪里使用这三个变量中的任何一个?这是你的全部密码吗?你认为你会从一个
应用程序
对象中获得什么?我想使用一个应用程序对象,因为给出的代码只是一个更大的应用程序中很小但很重要的一部分。我试着遵循一些关于模块化编码的想法,例如:我试着应用这种方法,并相应地编辑了我的问题。@Robin你的方法是错误的。请看我的答案,我添加了您要查找的确切代码。我已尝试应用此方法,并相应地编辑了我的问题。@Robin您的方法是错误的。请看我的答案,我添加了您要查找的确切代码。