2017-08-02 3 views
2

コンストラクタで定義された空のモジュールオブジェクトを含むappオブジェクトを作成しました。実行順序 - 新しいオブジェクトの関数が定義されていません

var App = function() { 
    this.modules = {}; 
}; 

modulesオブジェクトには、アプリケーションを構成し、ロジックを含む他のオブジェクト(モジュール)への参照が含まれています。

Iこの

window.app = new App(); 
app.createModules(); 

createModules(のようなアプリケーションをインスタンス)はモジュールがアプリケーションのモジュールを持つオブジェクト満たします。それが終了すると、各モジュールのinit()関数を呼び出すinitModules()が実行されます。このようにして、他のオブジェクトに依存するオブジェクトが正しく読み込まれるように、実行順序を制御できるようにしたいと考えています。このためのコードは次のとおりです。現在obj.init上のコンソールログは、私はそのオブジェクトの初期化コードを実行することができないことを意味し、未定義戻っている

App.prototype.createModules = function() { 
    console.log("Creating Modules"); 
    this.modules = { 
     radio: new Radio(), 
     visualiser: new Visualiser() 
    }; 
    this.initModules(this.modules); 
} 
App.prototype.initModules = function() { 
    console.log("Initialising modules"); 
    for (var key in this.modules) { 
     if (this.modules.hasOwnProperty(key)) { 
      var obj = this.modules[key]; 
      console.log(obj); 
      console.log(obj.init); //logs 'undefined' 
     } 
    } 
} 

。しかし、私が電話するとページが終了するとき

app.modules.radio.init 

それは関数を返します。私はなぜこれが起こっているのか分からないようです。

乾杯!

var app = function() { 
    ... 
} 

window.app = new App(); 
app.createModules(); 

function Radio() { 
    ... 
} 
Radio.prototype.init = function() { 
    ... 
} 

function Visualiser() { 
    ... 
} 
Visualiser.prototype.init = function() { 
    ... 
} 

//Event code 

Codepen:https://codepen.io/anon/pen/EvggLZ?editors=0011

+1

どこに 'obj.init'を定義するのかわかりません。 – lilezek

+0

obj.initは、initModules関数内でループしている間の単なるモジュールへの参照です。 var obj = this.modules [key]; したがってconsole.log(obj)は 'ラジオ{settings:Object}'を返します。すべてのモジュールはプロトタイプメソッドを持つオブジェクトとして定義され、すべてのモジュールはinit()protype関数を持っています – ca9191

+0

Radio.prototype.initとVisualizer.prototype.initはどこに定義されていますか? –

答えて

2

Here is the structure of app

はい、彼らはプロトタイプ上で作成される前にメソッドを呼び出します

EDIT は、ここでアプリの構造です。

window.app = new App(); 
app.createModules(); 

をスクリプトの下部に移動すると機能します。

+0

ありがとうございました!上記の初期化コードを下に移動し、イベントコード間を移動する必要がありました。 – ca9191

関連する問題