2012-11-28 4 views
5

단일 인스턴스 및 다중 인스턴스 관점에서 모듈 패턴 다음에 나오는 추가 코드 줄을 작성하는 방법과 정의 된 메서드 및 속성을 사용하는 표준 생성자를 사용하는 이유는 무엇입니까? 생성자 본문에?JavaScript 모듈 패턴 대 생성자에 정의 된 메소드가있는 생성자

모듈 패턴 샘플 : http://jsfiddle.net/T3ZJE/1/

var module = (function() { 
    // private variables and functions 
    var foo = 'bar'; 

    // constructor 
    var module = function() { 
    }; 

    // prototype 
    module.prototype = { 
     constructor: module, 
     something: function() { 
     } 
    }; 

    // return module 
    return module; 
})(); 

var my_module = new module(); 

console.log(my_module) 


생성자 샘플 : 나에게 http://jsfiddle.net/EuvaS/2/

function Module(){ 

    // private variables and functions 
    var foo = 'bar'; 

    //public methods 
    this.something = function() { 

    }   
} 

var my_module = new Module(); 

console.log(my_module); 

최종 결과는 거의 동일합니다. 둘 다 public 속성과 메서드를 가질 수 있으며 둘 다 public 메서드로 액세스 할 수있는 "private"변수와 메서드를 가질 수 있습니다.

둘 다 publicton/prototype 메소드를 싱글 톤에 대해 한 번 정의하며 둘 다 객체의 여러 인스턴스/클론에 대해 여러 번 정의합니다.

내가 누락 된 항목이 있습니까? 그 차이점은 무엇입니까?

답변

14

첫 번째 예에서 foo는 module()의 모든 인스턴스에 공통된 정적 변수입니다. 의미, 모든 인스턴스는 동일한 변수를 참조합니다.

두 번째 예제에서 foo는 각 Module() 인스턴스마다 다릅니다.

그 외에는 차이점이 없습니다.

+0

실제로 중요한 차이점 중 하나입니다. – Fergal

+1

poops와 giggles의 경우 Constructor 메소드를 약간 수정하면 정적 private vars가 생성되고 공용 메소드는 한 번만 정의되고 Constructor 범위의 모든 private vars에 액세스 할 수 있습니다. http://jsfiddle.net/zHwQX/2/ – Fergal

+0

@ 좋은 점, 그 중 하나를 보지 못했습니다. 그래서 전체적으로, 더 많은 기능과 더 작은 메모리 풋 프린트를 짐작할 수 있습니다. – Damp

0

특별한 차이점이 없습니다. 그러나이 예제에서 모듈 패턴의 요점은 무엇인지 모르겠습니다. 모듈에 생성자를 포함 할 필요가 없습니다. 생성자는 두 번째 스타일처럼 사용해야합니다. 그러나 각 인스턴스에 대해 필요가 없으면 프로토 타입 객체에 메서드를 정의하는 것이 좋습니다.

여기 다시 모듈의 패턴이 적절한 방법이라고 생각하지 않습니다.

+0

http : //briancray.com/posts/javascript-module-pattern – Fergal

+0

@Fergal 글쎄, 나는 그의 의견이 적절한 지 모르겠다. 무늬. 모듈에서 생성자를 갖는 질문에서 언급 한 것처럼 불필요한 추가 작업이라고 생각합니다. 나는 어떤 공로를 찾을 수 없다. –

관련 문제