이 게시물을 우연히 발견했습니다 : JavaScript의 Revealing Module Pattern . 내 프로젝트에서 이것을 사용하고 싶습니다.
내가 abc
함수가 있고 기본 JavaScript 파일에서 해당 함수를 호출 한다고 가정 해 보겠습니다 .
이 패턴이 상황을 다르게 만들까요? 누구든지이 패턴의 기본 예를 보여줄 수 있습니까?
답변
작은 예 :
var revealed = function(){
var a = [1,2,3];
function abc(){
return (a[0]*a[1])+a[2];
}
return {
name: 'revealed',
abcfn: abc
}
}();
익명 함수 즉, 수득 개시 revealed
값, a
및 abc
그 기능에 전용이다. 어떤 함수가 반환하는 것은와 객체 리터럴 name
속성과 abcfn
받는 사람에 대한 참조입니다 재산 abc function
. 는 abc function
민간 변수를 사용합니다 a
. 이것은 클로저 의 사용 덕분에 가능합니다 (함수 범위 내의 모든 것은 동일한 함수의 다른 모든 것에 의해 참조 될 수 있습니다).
공개 된 사용법 :
alert(revealed.name); //=> 'revealed'
alert(revealed.abcfn()); //=> 5 (1*2+3)
답변
DC = Douglas Crockford
RMP = 모듈 패턴 공개
DC와 RMP의 차이점은 주로 조직적이고 읽을 수 있습니다.
기사 자체에 예가 나와 있습니까? 그리고 정확히 무엇을 요구하고 있는가? 왜냐하면 그것들은 파일이 아니라 클로저와 관련이 있기 때문입니다.
모든 것을 클로저 (함수)에 넣고 접근하기를 원하는 부분 만 노출합니다. DC 스타일과 RMP의 차이는 RMP에 그들은 항상 같은 장소에서 정의하고 다음 나중에 동안 첫 번째 기능에 다른 장소에 정의되어 있다는 것입니다 밝혀 에 공공 객체 리터럴.
따라서 DC 및 RMP에는 다음이 있습니다.
- 비공개 부분 (변수 및 함수)을 정의 할 수있는 클로저
- 사적인 부분
- 공개적으로 표시되는 기능 및 변수 (상태)를 정의하는 공개 결과
이 두 패턴은 가독성 만 다릅니다. DC의 경우 특정 기능이 정의 될 위치를 항상 알 수는 없지만 RMP에서는 항상 모든 것이 비공개 부분에 있음을 알고 있습니다.
답변
공개 모듈 패턴은 초보자를위한 필수 자바 스크립트 디자인 패턴 문서에 잘 설명되어 있습니다.
답변
저자가 호출 한 “Douglas Crockford의 객체 생성 패턴”방법은 실제로 Richard Cornford 등이 주로 개발 한 모듈 패턴입니다 . http://groups.google.com/group/comp.lang.javascript/msg/9f58bd11bd67d937을 참조하세요.
예를 들어, 많이 있습니다. 다음 기사를 읽고 일부 링크를 따르십시오. http://peter.michaux.ca/articles/module-pattern-provides-no-privacy-at-least-not-in-javascript-tm
답변
모듈 패턴 의 이점으로 구조화 된 코드를 유지할 수 있도록 공개 모듈 패턴 과 싱글 톤 패턴을 혼합하여 사용하고 싶습니다 .
var MyFunction = function(){
var _ = {
Init: function(){
_.Config.foo = "hello world";
},
Config:{
foo:null
},
ShowAlert:function(){
alert(_.Config.foo);
}
}
return {
Init: _.Init,
ShowAlert: _.ShowAlert
};
}();
MyFunction.Init();
MyFunction.ShowAlert();
내 블로그에 이에 대한 자세한 정보를 썼습니다.
http://curtistimson.co.uk/js/mixing-revealing-module-and-singleton-javascript-patterns/
답변
추가하고 싶을뿐입니다.이 패턴을 사용하면 전역 종속성을 인수 / 매개 변수로 전달하여 명시 적으로 지정하는 것이 좋습니다. 당신은 그것을 할 필요가 없지만 이것은 당신의 모듈이 첫눈에 무엇을 필요로하는지 매우 명확하게합니다. 예 :
var myModule = (function ($, loadModule) {
"use strict";
})(jQuery, load);
이 예제에서는 첫 번째 줄에서 모듈이 jQuery 및 기능로드를 담당하는 다른 모듈을 사용하고 있음을 즉시 확인할 수 있습니다.
답변
모듈 외부의 코드에는 별 차이가 없습니다. 이 기사의 세 가지 경우 모두 메서드는 같은 방식으로 호출됩니다. 그러나 모듈 자체의 구조는 내부적으로 다릅니다.
Crockford의 모듈 패턴과 그들이 “공개 모듈 패턴”이라고 부르는 것은 구조적으로 거의 동일합니다. 유일한 차이점은 가독성을 높이기 위해 먼저 로컬 var에 메서드를 할당한다는 것입니다. 그러나 실제로 특별한 것은 없으며 링크에 몇 가지 예가 있습니다.