2016-09-22 2 views
0

눈 모양으로 단순화 된 자바 스크립트 모듈이 있습니다.노드 js의 모듈을 사용하고 값을 다시 할당하십시오.

var pose = require('./pose').init(); 
console.log(JSON.stringify(pose)); 
pose.eye.left = { yawPos: 99, pitchPos: 11 }; 
console.log(JSON.stringify(pose)); 

는 왜 두 번 같은 출력을 얻을 수 있습니까 :

var pose = {}; 
var eye = {}; 
var left = {}; 
left.pitchPos = 37; 
left.yawPos = 47; 

exports.init = function() { 
    eye.left = left; 
    pose.eye = eye; 
    return this; 
}; 

exports.eye = function (e) { 
    if(typeof(e) !== "undefined"){ 
     pose.eye = e;  
    } 
    return pose; 
}; 

exports.pose = pose; 

이 내가 그것을 사용하는 방법입니까?

잠재적 내가 이해하지 않은 모듈 및 범위 아직 문서에 어떤 힌트를 환영

+0

'this'을 (를) 참조하기를 기대하십니까? –

답변

1

은 "문제는"이 기능에 this 키워드의 잘못된 사용과 수 있습니다 :

exports.init = function() { 
    eye.left = left; 
    pose.eye = eye; 
    return this; 
}; 

이에 this 반환 문맥이란 "모듈 자체를 반환"하는 것을 의미합니다. 이 과제 (pose.eye.left = ...가) (pose.js 파일의 맥락에서) 이런 일을한다는 것을 의미 :이 가능하다 (결과에 당신이 기능 eye에 새 구성원을 할당 할 수 있도록

exports.eye.left = ... 

exports.eye는 기능입니다, JavaScript의 함수는 객체이기 때문에).


(pose.js 파일의 수정없이) 적절한 할당과 같을 것이다 :

업데이트에 필요한 몇 가지가 있습니다
pose.pose.eye.left = ... 
+0

우수 감사합니다. 어떤 힌트 자바 스크립트 모듈의 프로퍼 작성에 대한 문서를 찾을 수 있습니까? – user3732793

+0

코드 **는 ** 적절한 모듈입니다. ''this'' 키워드에주의를 기울여야합니다. 덕분에 – mdziekon

+0

. 나는 그것을 조심할 것이다 – user3732793

1

. 먼저 var, const 또는 let 모듈 범위의 키워드를 사용하여 변수를 선언 할 때이 변수는 모듈 자체에 대해서만 로컬입니다. 그들을 "사적"이라고 생각하십시오. 따라서 pose, eyeleft 변수는 내부에만 모듈에 표시됩니다. 또한 this을 반환하면 기본적으로 모든 모듈이 exports 속성을 통해 연결된 현재 모듈을 반환합니다 (제 생각 엔).

내가 이런 걸하고있는 제안 :

module.js

function Module() { 
    this.pose = { 
     eye: { 
      left: { 
       pitchPos: 37, 
       yawPos: 47 
      } 
     } 
    } 
} 

Module.prototype.setLeftEye = function(pitchPos, yawPos) { 
    this.pose.eye.left.pitchPos = pitchPos; 
    this.pose.eye.left.yawPos = yawPos; 
} 

module.exports = Module; 

을 당신이 그것을 사용하는 경우 :

var Module = require('./mod'); 

var mod = new Module(); 

console.log(JSON.stringify(mod.pose)); 
mod.setLeftEye(99, 11); 
console.log(JSON.stringify(mod.pose)); 

이 거의 기본적인 예입니다 유의하시기 바랍니다 그리고 당신은 그것에 확장 할 수 있습니다. 그러나이 코드는 응용 프로그램에서 모듈의 인스턴스가 두 개 이상 필요하다고 가정합니다.

+0

explenations에 감사드립니다. – user3732793