2017-12-21 27 views
-1

재미있는 "레벨 업 코딩"사이트 인 Exercism.io에서 코드 예제와 Jasmine 테스트를 위해 CommonJS 스타일 모듈을 사용하고 있습니다. 필자는 모듈을 다루지 않으려 고하는 번거 로움을 항상 생각해 왔지만 이러한 한 입 크기의 청크에서는 단일 페이지 응용 프로그램에서 사용하기에 매우 유용 할 수 있습니다. 그래서 저는 CommonJS 모듈 사용에 대한 좋은 샘플을 찾기 위해 Github을 검색해 왔으며, 여전히 주요 패턴이 무엇인지, 어떻게 다른지 자세히 설명하는 것을 찾지 못했습니다.CommonJS 모듈의 패턴?

var HelloWorld = function() {}; 

HelloWorld.prototype.hello = function() { 
    return 'Hello, World!' 
}; 

module.exports = HelloWorld; 

을하지만, 또 다른 하나는,이

var Bob = function() { 
    this.hey = function (input) { 
     input = input.split(''); 
     if (input.indexOf('!') >= 0) {return 'Whoa, chill out!'} 
     if (input.indexOf('?') >= 0) {return 'Sure.'}   
     return 'Whatever.' 
    }; 

} 

module.exports = Bob; 

같이 특히 나는 차이가 부모 정의 내부의 함수를 중첩 사이에 ​​무엇인지 궁금 보였다 예를 들어, 내가 제출 한 가지 대답이처럼 보였다 HelloWorld hello()가 프로토 타입을 대신 사용하는 것과 반대로 Bob hey() 함수를 사용하여 완료했습니다.

답변

2

예제로 제공 한 두 가지 기능은 서로 완전히 다른 목적으로 시작해야합니다.

예를 들어있는 코드를 기반으로 할 때, 호출하는 방식도 올바르지 않습니다.

밥 예를 들어, 당신이 할 일은 변수에 기능을 할당하는 것뿐입니다. 전화하려면 Bob()을 입력하기 만하면됩니다. Bob.hello()을 수행하면 오류가 발생합니다.

다른 HelloWorld는 단지 함수가 아닙니다. 글쎄, 당신이 HelloWorld()을 호출하면 호출 할 빈 함수로 선언했기 때문에 그렇습니다. 그러나 hello을 프로토 타입 함수로 정의 했으므로 HelloWorld.prototype.hello()를 직접 호출해야합니다. 나는 이것이 기존의 사물이나 기능의 행동을 바꾸기 위해 주로 사용되는 것으로 생각한다.

모듈을 작성하는 가장 효율적인 방법은 무엇인가를 묻는 중입니다. 실제로는 올바른 대답이 아닙니다. 모든 모듈은 다른 파일에서 내보내고 재사용 할 수있는 코드 조각입니다. 함수, 객체, 간단한 변수가 될 수 있습니다.

그래서 기본적으로 당신이 할 수있는 모든 :

// moduleThatExportsANumber.js 
module.exports = 1 

// moduleThatExportsAnObject.js 
module.exports = {} 

// moduleThatExportsAFunction.js 
module.exports = function() { return 'say somethign!'} 

// main.js Lets call all the modules! 
const number = require('./moduleThatExportsANumber) 
const object = require('./moduleThatExportsAnObject) 
const function = require('./moduleThatExportsAFunction) 

console.log(number) // 1 
console.log(object) // {} 
console.log(function) // function() { return 'say somethign!'} 
console.log(function()) //say somethign! 

모듈에 대한 모든 것은 단순히 CommonJS의 경우 module.exports = [whatever you are exporting]을 통해 이루어집니다 물건 것을 내보내기 파일에 물건을 쓰고, 나중에 가져 오는 CommonJS의 경우 require('./filename')

지금 ... 물어 본 원래 물건으로 되돌아갑니다. 불행히도 CommonJS 코드는 모르겠지만 here은 CommonJS 모듈 시스템에 대한 블로그 게시물이며 here은 자바 스크립트입니다.

+0

미안하지만 Bob.hello()는 오타였습니다. 저는 모듈 작성에 익숙하지 않아 Exercism.io의 데모 파일에있는 형식을 사용했습니다. hello() 함수는 Jasmine 스펙에서 처음 인스턴스를 작성하는 데 사용됩니다. var helloWorld = new HelloWorld(); - 실제 fn - helloWorld.hello() –