빌리 달 좋은 출발을 보여 주지만, 객체 리터럴을 사용의 문제, 즉 당신이 할 수없는 상호 참조 다른 분야/기능/호텔입니다.
내가 많이 계시 모듈 패턴을 선호
를 누설하는 모듈 패턴은 내부 개인 기능/필드를 제공하기 위해 폐쇄의 자동 실행 기능 (종류의) 착취를 결합과 같은 작업을 수행 할 수 있습니다 (http://www.wait-till-i.com/2007/08/22/again-with-the-module-pattern-reveal-something-to-the-world/ 참조) 매개 변수를 전달하여 네임 스페이스 객체를 초기화합니다.
var namespacedObject = function(param) {
var settings = param || someDefaultSetting, //default if no param supplied
somePrivateField = "someValue",
somePublicField = "i'm public";
//define some method we will later make public
function toggleComments(){
$("comments-section").hide();
$("comments-button").click(function(){
$(this).value= somePrivateField;
return false;
});
}
//this is where the magic happens,
//return object with all public fields/functions
return {
toggleComments : toggleComments,
somePublicField : somePublicField
};
}(someParam);
당신은 네임 스페이스 객체가 공개적으로 액세스 할 수있는 방법에서 참조 할 수있는 개인 필드 somePrivateField
이 포함되어 있음을 볼 수 있습니다. 또한 공개 필드를 공개하고 함수 등에서 사용할 수있는/참조 할 수있는 매개 변수를 받아 들였습니다 (아무 것도 전달되지 않으면 기본값으로 설정할 수 있습니다)
은 다음과 같이 사용할 수 있습니다.
좋아요
namespacedObject.toggleComments();
alert(namespacedObject.somePublicField);
alert(namespacedObject.somePrivateField); //undefined - it's private of course!
이유 중 하나는 단지 도움이 자동 실행 기능
희망에서 반환 된 객체 리터럴에서이기는에 의해 공개/개인 무엇인지 보는 것은 매우 쉽다이다