var blogModule = (function ( old) {
var my = {},
key;
for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[ key];
}
}
var oldAddPhotoMethod = old.AddPhoto;
my.AddPhoto = function() {
// 복제 후 다시 작성되었습니다. 물론 계속해서 oldAddPhotoMethod
}라고 부를 수 있습니다.
return my
} (blogModule));
이 방법은 유연하지만 유연성도 필요합니다. 사실 속성 개체나 개체의 기능이 전혀 복사되지 않고 동일한 개체에 대한 참조가 하나 더 있을 뿐이므로 이전 개체가 변경하면 , 복제된 객체가 소유한 속성이나 함수도 변경됩니다. 이 문제를 해결하려면 재귀를 사용해야 하지만 함수 할당에 재귀를 사용하는 것이 쉽지 않으므로 함수를 재귀할 때 이에 따라 평가합니다. 어쨌든 이 방법을 이 포스팅에 넣어두었기 때문에 모두가 주의해서 사용할 수 있습니다.
파일 간 비공개 개체 공유
위의 예를 통해 모듈이 여러 파일로 분할되는 경우 각 파일은 동일한 구조, 즉 익명 함수의 비공개 개체를 보장해야 한다는 것을 알 수 있습니다. 각 파일은 교차 접근도 불가능합니다. 그런데 사용해야 한다면 어떻게 해야 할까요? 먼저 코드를 살펴보겠습니다.
var blogModule = (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 || 함수 ;
my._seal = _seal;
};
return my;
🎜>모든 파일은 로컬 변수 _private에 속성을 설정하며 설정은 다른 파일에 즉시 적용됩니다. 이 모듈이 로드되면 애플리케이션은 blogModule._seal()을 호출하여 모듈을 "잠금"으로써 내부 _private에 대한 외부 액세스를 방지합니다. 이 모듈을 다시 생성해야 하는 경우 _unseal()을 호출하여 응용 프로그램 수명 주기 동안 모든 파일을 "잠금 해제"한 다음 새 파일을 로드할 수 있습니다. 로드한 후 _seal()을 다시 호출하여 "잠금"하십시오.
서브 모듈
이를 사용하는 마지막이자 가장 쉬운 방법은 서브 모듈을 만드는 것입니다
코드 복사
// ...
return my;
} () );
아주 간단하지만 서브모듈에도 일반 모듈의 고급 사용법이 모두 담겨 있어 어떤 서브모듈이든 다시 사용할 수 있다는 점을 설명하고 싶어서 넣었습니다. 위의 방법.
요약
위의 방법들은 대부분 서로 조합하여 사용할 수 있습니다. 일반적으로 시스템을 설계하려면 느슨하게 결합된 확장, 프라이빗 상태, 서브모듈 등의 방법을 사용할 수 있습니다. 그리고 여기서는 성능 문제를 언급하지 않았지만 모듈 모드가 효율적이고, 코드도 적고, 로딩 속도도 빠른 것 같아요. 느슨한 결합 확장을 사용하면 병렬 로딩이 가능해 다운로드 속도가 향상될 수 있습니다. 초기화 시간은 느려질 수 있지만 좋은 패턴을 사용하는 것이 좋습니다.
참고 기사:
http://yuiblog.com/blog/2007/06/12/module-pattern/
http://www.adequatelygood.com/2010/3/JavaScript-Module- 심층 패턴
동기화 및 추천
이 기사는 디렉토리 색인에 동기화되었습니다: JavaScript 시리즈에 대한 심층적 이해
원본, 번역, 재인쇄를 포함한 JavaScript 시리즈 기사에 대한 심층적 이해 그리고 다른 유형의 기사가 도움이 되었다면 삼촌이 글을 쓸 동기를 부여할 수 있도록 추천하고 지원해 주세요.