[NODEJS] Node.js를 모듈 및 기능에서 "이"의 의미
NODEJSNode.js를 모듈 및 기능에서 "이"의 의미
해결법
-
1.다음은 상황을 명확히 이해해야합니다 몇 가지 기본적인 사실입니다 :
다음은 상황을 명확히 이해해야합니다 몇 가지 기본적인 사실입니다 :
첫 번째 내부 노드 생성 모듈 래퍼 함수이며 번째 aFunction 내부있다 : 다른 내부 기능 각각이 상주 있기 때문에,이 값은 다른 얻는다.
-
2.이것을 이해하기 위해서는 Node.js를 실제로 다음과 같이 함수에 모듈의 코드를 감싸는 것을 이해할 필요가있다
이것을 이해하기 위해서는 Node.js를 실제로 다음과 같이 함수에 모듈의 코드를 감싸는 것을 이해할 필요가있다
(function (exports, require, module, __filename, __dirname) { var test = function(){ console.log('From test: ' + this); }; console.log(this); test(); });
상세 설명은이 답변에서 찾을 수 있습니다.
자,이 포장 기능은 실제로 다음과 같이 호출
var args = [self.exports, require, self, filename, dirname]; return compiledWrapper.apply(self.exports, args);
그래서,이 모듈 레벨에서, 실제로 수출 객체입니다.
이 같은 사항을 확인 할 수 있습니다
console.log(this, this === module.exports); // {} true
-
3.함수가 호출 될 때 자바 스크립트로,이 값은 결정된다. 함수가 생성됩니다하지 않는 경우. 모듈의 최 nodeJS 범위에서,이 값은 현재 module.exports 개체이다. 함수를 객체의 속성이라하면,이 값은 호출 된 객체를 변경한다. 당신은 단순히 왼쪽 - 중 - 점 규칙에 의해이 기억할 수 :
함수가 호출 될 때 자바 스크립트로,이 값은 결정된다. 함수가 생성됩니다하지 않는 경우. 모듈의 최 nodeJS 범위에서,이 값은 현재 module.exports 개체이다. 함수를 객체의 속성이라하면,이 값은 호출 된 객체를 변경한다. 당신은 단순히 왼쪽 - 중 - 점 규칙에 의해이 기억할 수 :
주의 사항 :
console.log(this); // {} , this === module.exports which is an empty object for now module.exports.foo = 5; console.log(this); // { foo:5 } let obj = { func1: function () { console.log(this); }, func2: () => { console.log(this); } } obj.func1(); // obj is left of the dot, so this is obj obj.func2(); // arrow function don't have their own this // binding, so this is module.exports, which is{ foo:5 }
산출:
-
4.Node.js를 모듈의 기본 전역 객체가 수출 객체이기 때문이다, 당신은이를 지정하지 않음) (시험을 요구하고있다. 기존의 JS에서 전역 객체에이 점은 엄격한 사용하여,이 null이됩니다.
Node.js를 모듈의 기본 전역 객체가 수출 객체이기 때문이다, 당신은이를 지정하지 않음) (시험을 요구하고있다. 기존의 JS에서 전역 객체에이 점은 엄격한 사용하여,이 null이됩니다.
어떤이 캔 포인트, 그냥 당신이 그것을 호출 방법에 따라 달라집니다.
thefourtheye의 답변을 맞서
이 모듈의 최상위이 수출 것은 사실이지만, 그것은 반드시이 내부 테스트는 ()도 같은 일을 가리킨가 호출 된 곳으로 것을 의미하지 않는다.
수출 두 지점이 있음을 증명 전역 객체하려고
myGLobal = 5; this.myGlobal; // 5
from https://stackoverflow.com/questions/22770299/meaning-of-this-in-node-js-modules-and-functions by cc-by-sa and MIT license
'NODEJS' 카테고리의 다른 글
[NODEJS] Node.js를에서, 어떻게 내 다른 파일에서 함수를 "포함"합니까? (0) | 2020.09.16 |
---|---|
[NODEJS] 어떻게 Node.js를에 오류 ECONNRESET을 디버깅 할 수 있습니까? (0) | 2020.09.16 |
[NODEJS] 어떻게 (타사 라이브러리를 사용하지 않고) Node.js를 가진 파일을 다운로드? (0) | 2020.09.16 |
[NODEJS] 어떻게 Node.js를 프로그램에 명령 줄 인수를 전달합니까? (1) | 2020.09.16 |
[NODEJS] 어떻게 '[오브젝트]') Node.js를의 CONSOLE.LOG (에 전체 개체를 얻을보다는 할 수 있습니까? (0) | 2020.09.16 |