[전단] exports 와 module. exports 의 차이

19984 단어 jsobject대상
exports module.exports 의 관 계 를 더욱 잘 이해 하기 위해 서, 우 리 는 먼저 js 기 초 를 보충 합 니 다.예시:
app.js
var a = {name: 'nswbmw 1'}; var b = a; console.log(a); console.log(b); b.name = 'nswbmw 2'; console.log(a); console.log(b); var b = {name: 'nswbmw 3'}; console.log(a); console.log(b);

app. js 실행 결 과 는:
D:\>node app { name: 'nswbmw 1' } { name: 'nswbmw 1' } { name: 'nswbmw 2' } { name: 'nswbmw 2' } { name: 'nswbmw 2' } { name: 'nswbmw 3' } D:\>

설명: a 는 하나의 대상 이 고 b 는 a 에 대한 인용 입 니 다. 즉, a 와 b 는 같은 대상 을 가리 키 고 a 와 b 는 같은 메모리 주 소 를 가리 키 기 때문에 앞의 두 출력 은 같 습 니 다.b 를 수정 할 때 a 와 b 가 같은 메모리 주 소 를 가리 키 는 내용 이 바 뀌 었 기 때문에 a 도 나타 나 기 때문에 세 번 째 출력 은 같 습 니 다.b 를 완전히 덮어 쓸 때 b 는 새로운 메모리 주 소 를 가리 키 고 (원래 의 메모리 블록 을 수정 하지 않 았 습 니 다) a 는 원래 의 메모리 블록 을 가리 키 고 있 습 니 다. 즉, a 와 b 는 더 이상 같은 메모리 를 가리 키 지 않 습 니 다. 즉, 이때 a 와 b 는 이미 관계 가 없 기 때문에 마지막 두 출력 은 다 릅 니 다.
상술 한 예 를 알 게 된 후에 우 리 는 본론 으로 들 어 갔다.우 리 는 세 가지 만 알 면 exports module.exports 의 차 이 를 알 수 있다.exports  가리키다  module.exports  의 인용 module.exports  초기 값 은 빈 대상 입 니 다.  그래서  {}  초기 값 도  exports {}  돌아 온 것 은  require()  ... 이 아니 라  module.exports
그래서:
우 리 는
 var name = 'nswbmw'; exports.name = name; exports.sayName = function() { console.log(name); }
을 통 해 exports 에 게 값 을 부여 한 것 은 exports 이라는 빈 대상 에 게 두 개의 속성 을 추 가 했 을 뿐이다. 위의 코드 는
 var name = 'nswbmw'; module.exports.name = name; module.exports.sayName = function() { console.log(name); }
에 해당 한다.
우 리 는 보통 이렇게 module.exports exports 간단 한 예 를 사용 하여 원 의 면적 을 계산한다. exports app. js
 var circle = require('./circle'); console.log(circle.area(4));
circle. js
 exports.area = function(r) { return r * r * Math.PI; }
를 사용 하여 module. exports app. js
 var area = require('./area'); console.log(area(4));
area. js
 module.exports = function(r) { return r * r * Math.PI; }
위의 두 가지 예 로 출력 하 는 것 이 같다.너 는 왜 이렇게 쓰 지 않 느 냐 고 물 을 지도 모른다.app. js
 var area = require('./area'); console.log(area(4));
area. js
 exports = function(r) { return r * r * Math.PI; }
가 위의 예 를 실행 하면 오류 가 발생 합 니 다.이것 은 앞의 예 에서 module.exports 에 속성 을 추가 함으로써 exports 가 가리 키 는 메모리 만 수 정 했 을 뿐
 exports = function(r) { return r * r * Math.PI; }
은 사실 exports 을 덮어 씌 웠 기 때문이다. 즉, exports 새로운 메모리 (원 면적 을 계산 하 는 함수) 를 가리 키 는 것 이다. 즉, exports exports더 이상 같은 메모 리 를 가리 키 지 않 는 다. 즉, 이때 module.exports exports 는 아무런 연관 이 없다. 즉, module.exports 가 가리 키 는 메모 리 는 아무런 변화 도 하지 않 고 빈 대상 module.exports 이 되 었 다. 즉, area. js 는 빈 대상 을 내 보 냈 고 우리 가 app. js 에서 area (4) 를 호출 하면 {} 의 오 류 를 보고 할 것 이다.따라서 한 마디 로 요약 하면 모듈 이 하나의 대상 으로 내 보 내 려 고 할 때 TypeError: object is not a function exports 는 모두 사용 할 수 있 지만 module.exports 는 새로운 대상 으로 다시 덮어 쓸 수 없다). 우리 가 대상 이 아 닌 인 터 페 이 스 를 내 보 내 려 면 반드시 덮어 쓸 수 밖 에 없다 exports.
우 리 는 이러한 표기 법 을 자주 본다.
 exports = module.exports = somethings
위의 코드 는
 module.exports = somethings exports = module.exports
원인 과 같 기 때문에 매우 간단 하 다. module.exports module.exports = somethings 에 대해 덮어 씌 웠 다. 이때 module.exports module.exports 의 관 계 는 끊 어 졌 고 exports 는 새로운 메모리 블록 을 가 리 켰 으 며 module.exports 는 원래 의 메모리 블록 을 가 리 켰 다. exports module.exports아니면 같은 메모 리 를 가리 키 거나 같은 '대상' 을 가리 키 기 때문에 우 리 는 exports.

좋은 웹페이지 즐겨찾기