2017-01-14 3 views
0

module.exports의 다른 객체 속성에 액세스하는 방법이 궁금합니다. 그럼, 텍스트 속성에 액세스하는 방법에module.exports의 객체 속성에 액세스하는 방법

module.exports = { 
 

 
    text: 'abcd', 
 
    index: (req, res)=>{ 
 
    console.log(text) <-- is not defined 
 
    console.log(this.text) <-- undefined 
 
    } 
 
}

: 여기

경우입니다? 고마워. 너희들의 설명이 필요해.

+0

를 통해 접근 시도/web/JavaScript/Reference/Functions/Arrow_functions)에 대한 정보를 제공합니다 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this). –

+0

코딩하는 동안 발견 된 사례를 통해 모범 사례를 배울 수 있습니다. D 나를 상기시켜 주셔서 감사합니다. @FelixKling –

+1

완전히 다른 질문이되도록 질문을 편집 할 때 스택 오버플로가 잘 작동하지 않습니다. 원래의 질문은 내가 대답 한'index'의 정의를위한 화살표 문법을 포함하고 있습니다. 제 대답을 쓴 후 질문을 편집 할 때,이 질문/답변의 요점을 완전히 망칠 수 있습니다. 하지 마세요. 나는 당신이 당신이 원래 질문했던 것과 같은 방식으로 당신의 질문을 되돌려 주어 답변들이 여전히 관련성이 있다고 제안 할 것입니다. 추가 정보를 요청하려면 의견을 통해 정보를 얻을 수 있는지 또는 새로운/다른 질문을해야하는지 확인하십시오. – jfriend00

답변

3

자바 스크립트에는 동일한 개체의 다른 속성을 참조하는 기본 제공 방법이 없습니다. 임의의 속성에 대해이 작업을 수행 할 수없는 이유는 충분합니다. 따라서 this에 올바른 개체 값이 있는지 확인하거나 적절한 개체 참조를 자신이 어딘가에 저장할 필요가 있습니다.

다음은 싱글 톤 객체에 대해 잘 작동하는 자신을 참조하는 개체를 저장하는 방법입니다 :

let myObj = { 

text: 'abcd', 
index: (req, res)=>{ 
    console.log(myObj.text) 
} 

} 

module.exports = myObj; 

당신이 .index() 항상에 방법으로 적절하게 호출되는 것을 알고 경우 module.exports (이 일반적인 경우), => 정의를 사용하지 않고 보통 function 정의를 사용하고 (이는 항상 메소드 선언에 사용되어야 함) this이 원하는 값을 갖습니다.

module.exports = { 

text: 'abcd', 
index: function(req, res) { 
    console.log(this.text) 
} 
} 

이 이렇게 한 .index() 지수가 호출 될 때 작동합니다

let myModule = require('myModule'); 
myModule.index(req, res); 

사람들은 화살표 구문와 사랑에 빠지게하고 메소드 정의에 사용되지 거의 안 잊지하는 경향이 왜냐하면 메소드에 문제를 일으키는 호스트 객체에 this을 설정하지 않기 때문입니다. 대신 개체의 메서드에 대해 function 정규 정의를 사용하십시오.


화살표 기능은 일반적으로 콜백 사용자 환경에서 this 값에 액세스 할 수 있도록하려면 콜백 함수에 매우 유용하다 (this의 어휘 값이라고합니다). 다음은 몇 가지 유용한 예는 다음과 같습니다

class Timer { 
    delay(t, cb) { 
     this.timer = setTimeout(() => { 
      // preserve this value inside a callback 
      this.timer = null; 
      cb(); 
     }) 
    } 
} 

또는 다른 한편으로

// preserve this value inside a callback 
let filtered = myArray.filter(item => { 
    return item.id !== this.master.id; 
}); 

, 당신은 그 보통의 개체 값을 대체하기 때문에 방법에 대한 화살표 선언을 사용하지 않으려는 거의 결코 this을 입력하고 this의 어휘 값으로 바꿉니다.

+0

좋은 설명하지만 나는 모든 scenorio 우리가 화살표 표기법을 사용할 수있는 무엇을 알고 싶습니까? 감사합니다 :) – ricky

+0

어때 대략 'module.exports = { index() { this.text는 원하는 값을 가질 수 없습니다. } } 메신저를 사용하는 메신저 –

+0

@ arrowy - 화살표 함수는 'this'값을 어휘 적으로 지정하고 함수가 호출 된 방식으로 결정되지 않도록하려는 경우에 사용됩니다. 귀하의 경우, 이것의 어휘 값은 모듈의 최상위 레벨에있는 'this'가 무엇이든 상관없이 귀하의 객체가 아닙니다. 이 코드가 정의되었을 때'this'의 값이 어휘 적으로 생각할 수 있습니다. 그것은 단순히 원하는 것이 아니므로 화살표 구문이 적절하지 않습니다. 화살표 구문은 콜백 내에 'this'의 어휘 값을 유지하고자 할 때 콜백 함수를 지정할 때 종종 아주 적절합니다. – jfriend00

0

사람이 https://developer.mozilla.org/en-US/docs ([화살표 기능]에 대해 배울 수있는 방법이 아직도 날 놀라게이

module.exports = { 

     text: 'abcd', 
     index: function (req,res) { 
      console.log(this.text) 
     } 
    } 

var te=require('modulename') 
    te.index() 
관련 문제