根据这个post我们知道变量可以从JavaScript中的一个模块导出:
// module.js
(function(handler) {
var MSG = {};
handler.init = init;
handler.MSG = MSG;
function init() {
// do initialization on MSG here
MSG = ...
}
})(module.exports);
// app.js
require('controller');
require('module').init();
// controller.js
net = require('module');
console.log(net.MSG); // output: empty object {}
以上代码位于Node.js
,我的empty object
中有一个controller.js
。你能帮我找出原因吗?
UPDATE1
我已更新上述代码:
// module.js
(function(handler) {
// MSG is local global variable, it can be used other functions
var MSG = {};
handler.init = init;
handler.MSG = MSG;
function init(config) {
// do initialization on MSG through config here
MSG = new NEWOBJ(config);
console.log('init is invoking...');
}
})(module.exports);
// app.js
require('./module').init();
require('./controller');
// controller.js
net = require('./module');
net.init();
console.log(net.MSG); // output: still empty object {}
输出:仍为空对象。为什么呢?
答案 0 :(得分:1)
当您在controller.js中console.log(net.MSG)
时,您尚未调用init()
。这只会在app.js中出现。
如果你在controller.js中init()
它应该可以工作。
我通过测试发现的另一个问题。
当您在MSG = {t: 12};
中init()
时,使用新对象覆盖MSG
,但这不会影响handler.MSG
的引用。您需要直接设置handler.MSG
,或修改 MSG
:MSG.t = 12;
。