2011-09-22 6 views
3

JavaScript 모듈 패턴에 대해 읽었습니다. 내 질문은 내가 그것으로 서브 모듈, 나는 그것으로부터 어떻게 상속 할 수 있습니다 즉 있도록 내가모듈 패턴을 통해 서브 모듈을 만드는 방법

var MODULE = (function() { 
    my = function(){ 
      this.params = "" 
     }, 
    privateVariable = 1; 

    my.prototype.moduleMethod = function() { 
     console.log("mod"); 
    }; 

    return my; 
}()); 

은 어떻게 특성을 가진 그것의 하위 클래스를 만들 수 있죠이 클래스가 부모로부터 상속이 말을 어떻게 무엇입니까? 어떻게 모듈 패턴을 사용하여 동일한 작업을 수행 할 수 있습니까?

+0

아, 그리고 RobG가 지적했듯이 항상 변수에 var를 사용하고, 절대 무시하지 않으며, 범위가 블로킹되지 않고 함수 범위 인 것을 기억하십시오. – Azder

답변

7

모듈 패턴이 클래스 패턴이 아닙니다. 단순히 자바 스크립트로 수업을하는 척할 수는 없습니다. 상속의 경우 물건을 상속해야하는 경우 생성자 함수를 통해 객체를 만들고 프로토 타입 상속을 사용해야합니다. 실행 속도가 느린 경우도 있습니다.

는 서브 모듈을 생성에 관해서는 더글러스 크록 포드는 그것을 시뮬레이션 http://www.crockford.com/javascript/inheritance.html

를하는 것처럼 고전적인 의미에서 서브 클래 싱을 위해, 당신은 프로토 타입과 객체에 시뮬레이션 할 수 있습니다로,

MODULE.submodule = (function(){ 
    // another module stuff that can even reference MODULE 
    return { submodule: 'property' } 
})(); 

이제 간단합니다 모듈의 경우 원래 모듈 내부에 씰/봉인 해제 기능을 만들어 하위 모듈에서 사용할 수 있습니다. 내이 아닌 경우 당신은

복제 및 상속

var MODULE_TWO = (function (old) { 
    var my = {}, 
     key; 

    for (key in old) { 
     if (old.hasOwnProperty(key)) { 
      my[key] = old[key]; 
     } 
    } 

    var super_moduleMethod = old.moduleMethod; 
    my.moduleMethod = function() { 
     // override method on the clone, access to super through super_moduleMethod 
    }; 

    return my; 
}(MODULE)) 

또는

크로스 - 파일 개인 주

var MODULE = (function (my) { 
    var _private = my._private = my._private || {}, 
     _seal = my._seal = my._seal || function() { 
      delete my._private; 
      delete my._seal; 
      delete my._unseal; 
     }, 
     _unseal = my._unseal = my._unseal || function() { 
      my._private = _private; 
      my._seal = _seal; 
      my._unseal = _unseal; 
     }; 

    // permanent access to _private, _seal, and _unseal 

    return my; 
}(MODULE || {})); 
+0

아하! 첫 번째 것은 유망한 것으로 보인다. 두 번째 하나는 조금 무서운 찾고 :) –

+0

자세한 내용은 벤 체리의 기사를 참조하십시오 : http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html – bob

1
>  var MODULE = (function() { 
>  my = function(){ 

여기 http://www.pallavlaskar.com/javascript-module-pattern-in-details/ 를 확인하실 수 있습니다 var로 선언하면, 그것 함수가 실행될 때 전역 변수가됩니다. 또한, 관례 적으로 생성자 이름 때문에, 대문자로 시작하는이 :

 var My = function(){ 

을하지만 당신은뿐만 아니라 단지 함수를 선언 할 수 있고 그것으로 수행 할 수 :

 function My() { 

합니다.

>    this.params = "" 
>   }, 
>  privateVariable = 1; 
> 
>  my.prototype.moduleMethod = function() { 
>   console.log("mod"); 
>  }; 

프로토 타입 상속을 구현하는 경우 왜 모듈 패턴을 사용해야합니까?

> 
>  return my; }()); 

모듈 패턴은 상속을위한 것이 아니라 기능의 "모듈"을 만들고 공개, 사기 및 개인 회원을 어느 정도 에뮬레이트합니다.