2016-08-31 9 views
0

より良いコードを書いてみたいと思います。オブジェクト内の特定の機能に関連するものをすべて入れることは良い考えです。コードをJSオブジェクトリテラルパターンに変換する

編集:私は@ 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(); 

、私が試してみました、私は種類の問題に実行はhere.

を述べましたコードを次のようにしてください:

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

いつものように助けてください。

+0

なぜですか?どのような目的のために? –

+0

"*特定の機能に関連するすべてのものをオブジェクトの中に入れることは良いアイデアです*" - いいえ、そうではありません。少なくとも一般的ではありません。 – Bergi

+0

他に、これらの3つの変数のいずれかを使用しますか?これはあなたのコード全体ですか?あなたは 'app'オブジェクトから何を得ると思いますか? – Bergi

答えて

3

特定の機能のあるものはではありませんが、いくつかの方法で対応できます。たとえば、次のオブジェクトを書きたいとします。

var obj = { 
    a: 5, 
    b: 7, 
    c: a + b 
}; 

ReferenceErrorがスローされます。それを避けるために、あなたはまた、それがクラス

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, 
    init(){ 
     this.c = this.a + this.b; 
     return this; 
    } 
}.init(); 

を、次のような構文を書き換えますあなたのケースでは、オーディオコンテキストスクリプトは次のようになります(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(); 
+0

私はこのアプローチを適用しようとしましたが、それに応じて私の質問を編集しました。 – Robin

+0

@Robinあなたのアプローチは間違っています。私の答えを見て、私はあなたが探している正確なコードを追加しました。 –

関連する問題