2013-11-25 3 views
0

그래서 나는 도우미 모듈 H를 가지고있는 내 주요 스크립트 M에서 I 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

M.js

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

H.js

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

노드의 아키텍처가 모듈마다 별도의 개별 글로벌 객체를 만들기 때문에 의도 한대로 할 수 없습니다. 그러나, 당신은 this가 자바 스크립트에서 어떻게 작동하는지의 메커니즘을 사용하여 비슷한 것을 얻을 수 있습니다. 일반 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에서 15,

: M.js에서

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

:

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

오, 흥미로운 해킹. 하지만 네 생각이 틀렸어. – user3025492

0

M :

o = {foo: 'bar'}; 

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

H :

module.exports = o.foo; 

변수를 선언하지 않음으로써 , 그것은 저장됩니다 공유되는 전역 객체.

관련 문제