2016-12-19 1 views
1

그래서, 솔직히 말해서, 자바 스크립트 이해가 최고가 아니 었습니다. 나는 DOM을 조작하는 데 익숙하다. 최근에 나는 당신의 지식과 이해를 향상시키기 위해 자바 스크립트 시리즈를 모른다.자바 스크립트 모듈

그들은 폐쇄의 개념을 제시합니다. 나는 아주 잘 알고있다. 그러나 나는 결코 전에 모듈 패턴을 만난 적이 없으며 그것을 사용했습니다. 나는 this example을 언급하고있다. 나는 즉시 일을 통해 배우면서 자신의 실천 사례를 만들려고 노력했다. 이것이 제가 생각해 낸 예입니다. 이 작동하지 않습니다..

function vehicle(){ 
    var wheels, doors; 

    function findType(wheels, doors){ 
     var numberOfWheels = wheels; 
     var numberOfDoors = doors; 
     var type; 

     switch(numberOfWheels | numberOfDoors){ 
     case 4 | 2: 
      type = "sports car"; 
     break; 
     case 4 | 4: 
      type = "sedan"; 
     break; 
     case 18 | 2: 
     case 18 | 4: 
      type = "tractor-trailer"; 
     break; 
     default: 
      type = "vehicle"; 
     } 
    } 
    return type; 
} 

var civic = vehicle(); 
console.log(civic.findType(4,4)); 

내 예상은 콘솔이 시민을 위해 "세단"유형을 반환해야한다는 것입니다. 그러나, 나는 만난다. 이유를 정확히 이해하지 못합니다. 모든 의견은 대단히 감사하겠습니다.

답변

3

The Revealing Module Pattern을 사용하고 있습니다. 모듈 함수는이 모듈에서 사용할 수있는 메서드를 제공하는 개체를 반환합니다.

function vehicle() { 
 
    var wheels, doors; 
 

 
    // a mdoule method 
 
    function findType(wheels, doors) { 
 
    var numberOfWheels = wheels; 
 
    var numberOfDoors = doors; 
 
    var type; 
 

 
    // the method returns the result 
 
    switch (numberOfWheels | numberOfDoors) { 
 
     case 4 | 2: 
 
     return "sports car"; 
 
     break; 
 
     case 4 | 4: 
 
     return "sedan"; 
 
     break; 
 
     case 18 | 2: 
 
     case 18 | 4: 
 
     return "tractor-trailer"; 
 
     break; 
 
     default: 
 
     return "vehicle"; 
 
    } 
 
    } 
 

 
    // the api of the module 
 
    return { 
 
    findType: findType 
 
    }; 
 
} 
 

 
var civic = vehicle(); 
 
console.log(civic.findType(4, 4));

PS

는 - 다양한 패턴의 깊이 검토 Adi Osmani's Learning JavaScript Design Patterns을 참조하십시오.

+0

멋진 답장과 링크 된 자료에 감사드립니다. 나는 그 방법을 반환하는 객체라는 것을 이해하지 못했습니다. – user1452407

+0

환영합니다. JS를 배우고 싶다면, JavaScript : The Good Parts 및 [JavaScript Allongé, "Six"Edition] (https://leanpub.com/javascriptallongesix/read)도 권장합니다. –