在同一变量中存储不同的对象

Storing different objects in same variable

本文关键字:对象 存储 变量      更新时间:2024-07-01

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

我有这样的东西:

app.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.jsSecondWindow.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调用这两个对象??

我建议你这样做(如果代码语法不正确,我很抱歉,但我使用了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()
        }
    };

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'));

首先用空属性对象MainWindowSecondWindow初始化MyApp.ui,然后用inject填充它们。