0

我试图弄清楚如何将不同的对象存储在某个“命名空间”中。

我有这样的事情:

应用程序.js

// This is the startup script:
var MyApp = {}
MyApp.ui = {}
MyApp.ui = require('ui/MainWindow');
MyApp.ui = require('ui/SecondWindow');

// Doesn't exist anymore because the 2nd require overwrites the
// first include
MyApp.ui.MainWindow.test;

然后我也有MainWindow.jsand SecondWindow.js,它看起来像这样:

var MainWindow = {
    test: "Main"
}

exports.MainWindow = MainWindow;

var SecondWindow = {
    test: "Second"
}

exports.SecondWindow = SecondWindow;

exports.XXXWindow = XXXWindow基本上使该对象可用。

所以在我的app.js我尝试将MainWindow对象存储在MyApp.ui. 所以我可以这样称呼它:

MyApp.ui.MainWindow.test

然后我还想将SecondWindow对象添加到其中。所以我可以用同样的方式调用它:

MyApp.ui.SecondWindow.test

但是我现在拥有它的方式导致第二个需要覆盖第一个。所以它现在只指向SecondWindow。我该怎么做才能调用这两个对象MyApp.ui??

4

2 回答 2

1

我建议你这样做(如果代码在语法上不正确,我很抱歉,但我使用的是 coffeescript,我不再使用 Javascript):

MainWindow.js

var MainWindow = function() {
    return {test: 'Main'};
};
module.exports = MainWindow;

SecondWindow.js

var SecondWindow = function() {
    return {test: 'Second'};
};
module.exports = SecondWindow;

app.js

var myApp = {
    ui: {
        MainWindow: require('MainWindow.js'),
        SecondWindow: require(SecondWindow.js)
    }
};

现在我的个人意见。我更喜欢这样做:

app.js

var MainWindow = require('MainWindow'),
    SecondWindow = require('SecondWindow'),
    myApp = {
        ui: {
            MainWindow: new MainWindow(),
            SecondWindow: new SecondWindow()
        }
    };
于 2012-07-31T14:58:58.317 回答
0

的第二个赋值MyApp.ui将覆盖它的旧值。但是,您可以执行以下操作:

function inject(obj_into,obj_from){
    for(var x in obj_from)
        obj_into[x] = obj_from[x];
}

MyApp.ui = {MainWindow:{},SecondWindow:{}};
inject(MyApp.ui.MainWindow,require('ui/MainWindow'));
inject(MyApp.ui.SecondWindow,require('ui/SecondWindow'));

MyApp.ui您首先使用空属性对象进行初始化MainWindowSecondWindow然后用inject.

于 2012-07-31T14:24:21.487 回答