>웹 프론트엔드 >JS 튜토리얼 >seaJs의 내보내기와 module.exports의 차이점에 대한 자세한 설명

seaJs의 내보내기와 module.exports의 차이점에 대한 자세한 설명

黄舟
黄舟원래의
2017-10-14 10:13:031706검색

이 글에서는 주로 seaJs 사용 경험을 바탕으로 내보내기와 module.exports의 차이점을 소개합니다. 내보내기와 module.exports의 구체적인 기능, 사용 방법 및 관련 작업 주의 사항을 예시 형식으로 분석합니다. 이 글의 예제에

seaJs 사용 경험을 바탕으로 내보내기와 module.exports의 차이점을 설명합니다. 다음과 같이 참고할 수 있도록 모든 사람과 공유하세요.

1. 내보내기는 module.exports의 보조 개체입니다. 내보내기가 외부 세계에 API를 제공하는 경우 내보내기 개체

2를 반환하는 데 사용해야 합니다. 내보내기는 외부 세계에 직접 API를 제공할 수도 있습니다

참조: https://github.com/seajs/seajs/issues/242

exports Object

exports는 내보내기에 모듈 인터페이스를 제공하는 데 사용되는 개체입니다. 외부 세계.


define(function(require, exports) {
 // 对外提供 foo 属性
 exports.foo = 'bar';
 // 对外提供 doSomething 方法
 exports.doSomething = function() {};
});

내보내기 개체에 멤버를 추가하는 것 외에도 return을 사용하여 외부 세계에 인터페이스를 직접 제공할 수도 있습니다.


define(function(require) {
 // 通过 return 直接提供接口
 return {
  foo: 'bar',
  doSomething: function() {}
 };
});

반환 문이 모듈의 유일한 코드인 경우 다음과 같이 단순화할 수도 있습니다.


define({
 foo: 'bar',
 doSomething: function() {}
});

위 형식은 특히 JSONP 모듈을 정의하는 데 적합합니다.

특별 참고 사항: 다음 작성 방식이 잘못되었습니다!


define(function(require, exports) {
 // 错误用法!!!
 exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});

올바른 작성 방법은 return을 사용하거나 module.exports에 값을 할당하는 것입니다.


define(function(require, exports, module) {
 // 正确写法
 module.exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});

팁: 내보내기는 module.exports에 대한 참조일 뿐입니다. 공장 내에서 내보내기가 다시 할당되면 module.exports 값은 변경되지 않습니다. 따라서 내보내기에 값을 할당하는 것은 유효하지 않으며 모듈 인터페이스를 변경하는 데 사용할 수 없습니다.

module.exports Object

현재 모듈에서 제공하는 인터페이스입니다.

팩토리 생성자에 전달된 내보내기 매개변수는 module.exports 객체에 대한 참조입니다. 내보내기 매개변수를 통해서만 인터페이스를 제공하면 개발자의 모든 요구 사항을 충족할 수 없는 경우가 있습니다. 예를 들어, 모듈의 인터페이스가 특정 클래스의 인스턴스인 경우 module.exports를 통해 구현해야 합니다.


define(function(require, exports, module) {
 // exports 是 module.exports 的一个引用
 console.log(module.exports === exports); // true
 // 重新给 module.exports 赋值
 module.exports = new SomeClass();
 // exports 不再等于 module.exports
 console.log(module.exports === exports); // false
});

참고: module.exports에 대한 할당은 동기적으로 실행되어야 하며 콜백 함수에 배치되었습니다. 다음은 작동하지 않습니다.


// x.jsdefine(function(require, exports, module) {
 // 错误用法
 setTimeout(function() {
  module.exports = { a: "hello" };
 }, 0);
});

y.js에서 위의 x.js에 대한 호출이 있습니다.


// y.jsdefine(function(require, exports, module) {
 var x = require('./x');
 // 无法立刻得到模块 x 的属性 a
 console.log(x.a); // undefined
});

위 내용은 seaJs의 내보내기와 module.exports의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.