2016-12-31 1 views
3

자바 스크립트에서 모듈을 만드는 방법에 대해 몇 가지 질문이 있습니다. 이것이 내가 찾은 구문입니다.자바 스크립트 모듈 및 디자인 패턴

var Westeros; 
(function (Westeros) { 
    (function (Structures) { 
     var Castle = (function() { 
      function Castle(name) { 
       this.name = name; 
      } 
      Castle.prototype.build = function() { 
       console.log("Castle " + this.name) 
      }; 
      return Castle; 
     })(); 
     Structures.Castle = Castle; 
    })(Westeros.Structures || (Westeros.Structures = {})); 
    var Structures = Westeros.Structures; 
})(Westeros || (Westeros = {})); 

var winterfell = new Westeros.Structures.Castle("Winterfell"); 
winterfell.build(); 

내가 걸린 문자는 this code from Mastering Javascript Design Patterns입니다. 그러나이 줄이 필요한 이유를 찾으려고 노력했습니다.

var Structures = Westeros.Structures; 

이 줄을 생략하면 코드가 예상대로 작동합니다. 이것에 대한 설명이 있습니까? 수업을 "드러내는"것일까 요?

감사합니다.

+7

젠장, 그건 끔찍한 코드. 그 일을 지시하는 책이 있어요? –

+0

해당 라인은 완전히 무의미합니다. 후속 예제에서 더 많은 코드가 도입 되었기 때문에 아마도 여기에 있습니다.하지만 여기에 게시 된 코드에는 아무 것도 없습니다. – Pointy

+0

명확히 읽기가 어렵습니다 ... – Legends

답변

1

이 코드는 끔찍한 코드입니다.

function Castle(name) { 
    this.name = name; 
} 

Castle.prototype.build = function() { 
    console.log("Castle " + this.name) 
}; 

var Westeros = { 
    Structures: {} 
}; 

Westeros.Structures.Castle = Castle; 

var winterfell = new Westeros.Structures.Castle("Winterfell"); 
winterfell.build(); 

ES5에서 "클래스"를 정의하는, 당신이 할 일은 무엇이든 초기화 코드 당신이 원하는 어떤 인수 및 장소 함수를 선언 할 수 있습니다 : 여기에 모든 의미가 폐쇄하지 않고 어떤 일이 정확한을하는 샘플입니다 내부. 메서드는 해당 함수의 .prototype 속성에 추가되고 해당 클래스를 사용하는 새 개체는 new 키워드로 해당 생성자 함수를 호출하여 만들어집니다.

var Structures = Westeros.Structures;은 아무런 용도로 사용되지 않습니다. 원래 코드 샘플을 유지하려면 제거하면 아무 것도 변경되지 않습니다. 사실, 클로저 내부에 선언되어 있고 그 범위 밖에서 액세스 할 수 없으므로 더 많은 코드를 사용하더라도 더 이상 사용할 수 없습니다.

+0

네임 스페이스를 시뮬레이션하고 싶다면 어떨까요? 꽤 간단한 솔루션은 전역 객체를 만든 다음 그 안에 객체를 추가하는 것입니다. 그렇죠? – sms343

+0

맞습니다. 이 코드를 전역 범위에 배치하면 'Westeros'가 전역 변수가되므로 '성'에 'Westeros'네임 스페이스를 통해 액세스 할 수 있습니다. 또한 [RequireJS] (http://requirejs.org/)가 귀하의 요구에 적합한 지 살펴볼 수도 있습니다. – Hydrothermal

+0

굉장한 감사합니다! 그래서, 바닐라 자바 ​​스크립트에서 나는 다른 종류의 모듈 (function() {})()의 생성을 보았습니다. 다른 솔루션을 사용하여 비슷한 방식으로 디자인 패턴을 구현할 수 있다고 가정합니다. – sms343

관련 문제