コンストラクタで定義された空のモジュールオブジェクトを含む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
どこに 'obj.init'を定義するのかわかりません。 – lilezek
obj.initは、initModules関数内でループしている間の単なるモジュールへの参照です。 var obj = this.modules [key]; したがってconsole.log(obj)は 'ラジオ{settings:Object}'を返します。すべてのモジュールはプロトタイプメソッドを持つオブジェクトとして定義され、すべてのモジュールはinit()protype関数を持っています – ca9191
Radio.prototype.initとVisualizer.prototype.initはどこに定義されていますか? –