我正在试图弄清楚如何在某个“命名空间”中存储不同的对象。
我有这样的事情:
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.js
和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
??
答案 0 :(得分: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()
}
};
答案 1 :(得分: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
,MainWindow
初始化SecondWindow
并使用inject
填充它们。