所以我有一个辅助模块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; }};
因此,人们可以向这个方向揭露事物。我可以做些什么来反过来分享事情?
答案 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);
}