이 글에서는 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!