0

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript공개 모듈 패턴 코드를 모듈 패턴으로 변환

나는 위의 마스터 피스를 통과했다. 나는 여전히 위의 기사에서 두 가지를 얻을 수 없습니다.

var myRevealingModule = (function() { 

     var privateVar = "Ben Cherry", 
      publicVar = "Hey there!"; 

     function privateFunction() { 
      console.log("Name:" + privateVar); 
     } 

     function publicSetName(strName) { 
      privateVar = strName; 
     } 

     function publicGetName() { 
      privateFunction(); 
     } 


     // Reveal public pointers to 
     // private functions and properties 

     return { 
      setName: publicSetName, 
      greeting: publicVar, 
      getName: publicGetName 
     }; 

    })(); 

myRevealingModule.setName("Paul Kinlan"); 

관련 질문 : JavaScript design pattern: difference between module pattern and revealing module pattern?

내가 위의 질문에서 많은 부분을 이해했다. 누구든지 위의 revealing module pattern을 전통적인 module pattern으로 변환하여 차이를 시각화 할 수 있습니까?

+0

필자가 말할 수있는 한 '노출 모듈 패턴'은 '모듈 패턴'을 수행하는 또 다른 방법입니다. 다른 방법을 원한다면'node.js' 모듈 ('commonjs') 또는'amd' 모듈을보십시오. 그것은 일종의 "모듈"일 뿐이며 (명백히 내 마음 속으로) 명백한 폐쇄가 없기 때문입니다. 결국, 기본적으로는 동일하지만 코드의 일부만 생성됩니다. – Alxandr

+0

또한 위에 게시 한 코드에 대한 요점. 'publicVar'는 public이 아닙니다. 왜냐하면'myRevealingModule.greeting'은 포인터가 아니기 때문입니다. http://jsfiddle.net/Xr2kB/ – Alxandr

답변

0

모듈 패턴 코드는 다음과 같습니다 : 당신은 밝히려 모듈 패턴을 피할 때 두 가지 옵션이있는 jsfiddle

var myModule = (function() { 

    var privateVar = "Ben Cherry"; 

    function privateFunction() { 
     console.log("Name:" + privateVar); 
    } 

    return { 
     setName: function(strName) { 
      privateVar = strName; 
     }, 
     greeting: "Hey there!", 
     getName: function() { 
      privateFunction(); 
     } 
    }; 

})(); 
myModule.setName("Paul Kinlan"); 
0

을 볼 수 있습니다. 객체 리터럴 또는 스텁 리턴 객체를 사용할 수 있습니다. 그루터기를 사용

var myRevealingModule = (function() { 
    var privateVar = "Ben Cherry"; 

    function privateFunction() { 
     console.log("Name:" + privateVar); 
    } 

    return { 
     setName: function(strName){ 
     privateVar = strName; 
     }, 
     greeting: "Hey there!", 
     getName: function() { 
     privateFunction(); 
     } 
    }; 

})(); 

: 객체 리터럴을 사용하여

var myRevealingModule = (function() { 
    var privateVar = "Ben Cherry"; 
    function privateFunction() { 
     console.log("Name:" + privateVar); 
    } 

    var stub = {}; 
    stub.greeting = "Hey there!"; 
    stub.setName = function (strName) { 
     privateVar = strName; 
    }; 
    stub.getName = function() { 
     privateFunction(); 
    } 
    return stub; 

})(); 

핵심은 당신이 그것을 숨길하지 않을 경우 폐쇄에 아무것도 넣어하지 않는 것입니다. 종결 자에 뭔가를 넣은 다음 나중에 "공개"하지 마십시오.