执行顺序 - 新对象的函数未定义

时间:2017-08-02 19:34:19

标签: javascript

我创建了一个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

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

1 个答案:

答案 0 :(得分:2)

  

以下是app的结构

是的,在原型上创建方法之前调用这些方法。移动

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

到脚本的底部,它将起作用。