0

私はより良いコードを書き始めたいと思っており、特定の機能に関連するすべてのものをオブジェクト内に配置することは良い考えだと理解するようになりました.

編集:@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(),
    ...
}

いつものようにどんな助けでも大歓迎です。

4

1 に答える 1

3

あなたがやろうとしていることは、特定の機能ではありませんが、いくつかの方法で実行できます。たとえば、次のオブジェクトを書きたい場合

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

編集

あなたの場合、オーディオ コンテキスト スクリプトは次のようになります ( JSFiddleも参照)。

var app = {
  context: new (window.AudioContext || window.webkitAudioContext)(),
  gainNode: null,
  oscillator: null,
  init(){
    this.gainNode = this.context.createGain();
    this.oscillator = this.context.createOscillator();
    this.gainNode.connect(this.context.destination);
    this.oscillator.frequency.value = 440;
    this.oscillator.connect(this.gainNode);
    this.oscillator.start();
  }
};

app.init();
于 2016-08-31T18:41:26.747 に答える