如何在模块之间共享对象?

时间:2013-11-25 13:05:39

标签: javascript node.js module

所以我有一个辅助模块H,我来自我的主脚本M require

M.js:

var o = {foo: 'bar'};
require('H.js').doFunc();

H.js:

module.exports = {doFunc: function(){ /* how can I set X to o.foo in M's scope? */ return X; }};

因此,人们可以向这个方向揭露事物。我可以做些什么来反过来分享事情?

3 个答案:

答案 0 :(得分:1)

您无法按照预期的方式执行此操作,因为节点的体系结构会为每个模块创建单独的单个全局对象。但是,您可以使用this在javascript中的工作原理来获得类似的东西。

在普通的js中,给出:

function doFunc () {
    return this.foo;
}

var o = {foo:'bar'};

你可以这样做:

o.dofunc = doFunc;
o.doFunc(); // returns 'bar'

可替换地:

doFunc.call(o); // also returns 'bar'

所以,将这种技术应用于模块:

在H.js:

module.exports.doFunc = function () {return this.foo}

在M.js:

var o = {
    foo: 'bar',
    dofunc : require('H.js').doFunc
};
o.dofunc();

答案 1 :(得分:0)

L:

o = {foo: 'bar'};

require('./H.js')(); // 'bar'

H:

module.exports = o.foo;

通过不声明变量,它将存储在共享的全局对象上。

答案 2 :(得分:0)

M.js

var o = {foo: 'bar'};
require('H.js')(o);

H.js

module.exports = function (o) {
   console.log(o);
}