我创建了一个app对象,其中包含构造函数中定义的空模块对象。
var App = function() {
this.modules = {};
};
modules对象包含对构成应用程序并包含其逻辑的其他对象(模块)的引用。
我像这样实例化应用
window.app = new App();
app.createModules();
createModules()使用应用程序的模块填充模块对象。然后,当它完成时,它运行initModules(),调用每个模块的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'
}
}
}
目前,obj.init上的控制台登录返回undefined,这意味着我无法运行该对象的init代码。但是当我打电话
时页面加载完毕app.modules.radio.init
返回功能。我似乎无法弄清楚为什么会发生这种情况。
干杯!
修改 这是app的结构:
var app = function() {
...
}
window.app = new App();
app.createModules();
function Radio() {
...
}
Radio.prototype.init = function() {
...
}
function Visualiser() {
...
}
Visualiser.prototype.init = function() {
...
}
//Event code
答案 0 :(得分:2)
以下是app的结构
是的,在原型上创建方法之前调用这些方法。移动
window.app = new App();
app.createModules();
到脚本的底部,它将起作用。