2012-10-30 2 views
0

샘플 코드 : JS1.js에서nodejs에서

코드 : JS3.js에서

var js2=require("../../util"); 
var dataName="Billy"; 
function hello1(){ 
    js2.hello2("message"); 
} 

코드 :

var js2=require("../../util"); 
var dataName="Tom"; 
function hello3(){ 
    js2.hello2("message"); 
} 

JS2.js 코드 :

exports.hello2=hello2; 
function hello2(arg1){ 
    console.log(arg1); 
    //Here I need the data in global variable "dataName" of file JS1.js or JS3.js 
} 

호출자 js 파일의 전역 변수에 액세스해야합니다.

답변

1

모든 모듈은 node.js에 global 개체를 공유합니다. 그래서 JS1.js에 ...

global.dataName = "Billy"; 

은 ... 다음 JS2.js에 그러나

console.log(global.dataName); 

,이 방법으로 global를 사용하여 일반적으로 빈약 한 형태로 간주됩니다 놀라운해서는 안됩니다 . JS2를 JS1에 의존하지 않으려는 구체적인 이유가 없다면, module.exports의 일부로 JS2 내보내기 dataName 만있는 것이 좋습니다.

+0

귀하의 의견을 주셔서 감사합니다, 나는 몇 가지 변경 사항을 질문에, 지금은 다른 js 파일에서 hello2 방법에 액세스하면, 그때 내 전역 변수에 액세스하는 내 js2 파일에서 여러 개체를 선언 할 수 없습니다. 나는 JS2.js 메소드에서'hello2()'에서 this.hello2.caller에 의해 이전 함수 객체에 접근 할 수 있다는 것을 알았습니다. 호출자 메소드 객체를 제공합니다. 그러나 나는 더 이상 진행할 수 없다. – Dexter

+0

축하합니다. 내 대답이 더 이상 의미가 없도록 질문을 변경했습니다. 내가 조금 실망 스럽거나 귀찮은 것을 알게 된 것은 당연한 일이다. 다음 번에 귀하의 원래 질문에 답을하고 (답변을 수락 함), 1) 새로운 질문을 작성하거나, 2) 의견에 후속 질문을하십시오. – broofa

+1

레코드에 대해서, 당신이'호출자 (caller) '를 발견했을 때 호출 함수에 대한 참조 만 제공합니다. 그러나 변수가 변수 자체에서 정의 된 컨텍스트를 발견하기위한 기본 제공 메커니즘이 없으므로 원하는 작업을 수행하는 데 도움이되지 않습니다. 호출하는 모듈 컨텍스트에 대한 참조를 얻으려면 함수에 명시 적으로 설정해야합니다 (예 :'hello1.context = module.exports '). 그러나 그것은 이상하게 보입니다. 대신, 그것을 hello2에 대한 인수로 전달하십시오. – broofa

관련 문제