CommonJS 모듈은 내 보낸 속성을 정의하는 두 가지 방법을 허용합니다. 두 경우 모두 개체 / 함수를 반환합니다. 함수는 JavaScript에서 일급 시민이기 때문에 객체처럼 작동 할 수 있습니다 (기술적으로는 객체입니다). new
키워드 사용에 대한 귀하의 질문에 간단한 대답이 있습니다. 예. 설명하겠습니다 ...
모듈 내보내기
exports
제공된 변수 를 사용하여 속성을 연결할 수 있습니다. 다른 모듈에서 필요한 경우 이러한 할당 속성을 사용할 수 있습니다. 또는 module.exports 속성에 개체를 할당 할 수 있습니다. 두 경우 모두에서 반환되는 require()
것은의 값에 대한 참조입니다 module.exports
.
모듈 정의 방법에 대한 의사 코드 예제 :
var theModule = {
exports: {}
};
(function(module, exports, require) {
// Your module code goes here
})(theModule, theModule.exports, theRequireFunction);
위의 예에서 module.exports
와 exports
같은 목적이다. 멋진 부분은 CommonJS 모듈에서 그 어떤 것도 볼 수 없다는 것입니다. 전체 시스템이 알아서 처리하므로 exports 속성이있는 모듈 객체와 다음을 가리키는 exports 변수가 있다는 것입니다. module.exports가하는 것과 똑같습니다.
생성자에 필요
함수를 직접 첨부 할 수 있기 때문에 module.exports
본질적으로 함수를 반환 할 수 있고 다른 함수와 마찬가지로 생성자 로 관리 할 수 있습니다 (JavaScript에서 함수와 생성자 간의 유일한 차이점은 사용하려는 방식이므로 기울임 꼴로 표시됩니다. 다른 점이 없다.)
따라서 다음은 완벽하게 좋은 코드이며 개인적으로 권장합니다.
// My module
function MyObject(bar) {
this.bar = bar;
}
MyObject.prototype.foo = function foo() {
console.log(this.bar);
};
module.exports = MyObject;
// In another module:
var MyObjectOrSomeCleverName = require("./my_object.js");
var my_obj_instance = new MyObjectOrSomeCleverName("foobar");
my_obj_instance.foo(); // => "foobar"
비 생성자에게 필요
함수와 같은 비 생성자도 마찬가지입니다.
// My Module
exports.someFunction = function someFunction(msg) {
console.log(msg);
}
// In another module
var MyModule = require("./my_module.js");
MyModule.someFunction("foobar"); // => "foobar"
square
에Square
는new square()
더 이상 존재하지 않습니다.