2011-08-02 5 views
19

나에게는 클래스가 NodeJS (CommonJS) 모듈과 매우 비슷합니다. 당신은 그들 중 많은 것들을 가질 수 있고, 재사용 될 수 있으며, 그들은 서로 사용할 수 있으며, 일반적으로 파일 당 하나입니다.NodeJS 모듈 대 클래스

모듈이 수업과 크게 다른 이유는 무엇입니까? 사용 방법이 다르며 네임 스페이스의 차이가 분명합니다. 그 외에도 그들은 나에게 매우 똑같은 것처럼 보이거나 어쩌면 여기서 확실한 이점을 보지 못하고있을 것입니다.

+0

을 - ECMAScript를 6 클래스 대 모듈을 commonjs –

답변

21

모듈은 클래스보다 Java 용어를 사용하는 패키지와 비슷합니다. 모듈을 인스턴스화하지 않습니다. 그것의 복사본이 하나뿐입니다. 관련 기능을 구성하는 도구이지만 일반적으로 개체의 특정 인스턴스 데이터를 캡슐화하지는 않습니다.

아마 클래스에 가장 가까운 아날로그 (JavaScript에서 클래스 기반 상속을 실제로 구성하는 라이브러리를 제외하고)는 단지 생성자 함수 일뿐입니다. 물론 이러한 함수를 모듈 안에 넣을 수 있습니다.

function Car() { 
    this.colour = 'red'; 
} 
Car.prototype.getColour = function() { return this.colour; }; 

var myCar = new Car(); 
myCar.getColour(); // returns 'red' 

캡슐화를 위해 모듈과 클래스를 모두 사용하지만 캡슐화의 특성이 다릅니다.

0

하나의 중요한 것; "일반적으로 하나의 파일 당 하나"의 것은 사실이 아닙니다. 모듈은 절대적으로 파일 당 하나입니다. 모듈 exports을 네임 스페이스에 가져 오는 require()은 해당 모듈의 내 보낸 콘텐츠를 구별 할 방법이 없습니다. 모듈 (파일)이 반출하는 모든 내용은 require() 문으로 가져옵니다. 하나 이상의 모듈을 파일에 넣으려고하면 "어느 한쪽"모듈을로드하려고 할 때 해당 파일의 모든 것을 가져옵니다.

1

JS는 처음에는 프로토 타입 상속 시스템이었습니다. 언어의 나머지 부분과 마찬가지로 매우 간단했습니다. 그러나 넷스케이프는 자바를 자바와 비슷하게 만들고 생성자에 대한 아이디어를 언어에 추가하기로 결정했다. 따라서 의사 클래스가 탄생했습니다. 당신은 JS에서 어떻게 사용되는지 프로토 타입 OOP 알이 링크를 확인할 수 있습니다 나를 Node.js를 서버 벤치 마크입니다 호기심 무엇 http://howtonode.org/prototypical-inheritance