<script> <br>YAHOO.namespace("myProject") <br>YAHOO.myProject.myModule = function () { <br>// YUI 유틸리티: <br>var yue = YAHOO.util.Event, <br>yud = YAHOO.util.Dom; <br>//Private 메소드 <br>var getListItems = function () { <br>// 여기서는 "yud" YAHOO.util.Dom의 약어를 포함하여 다른 개인 변수가 사용됩니다. <br>var elList = yud.get("myList") <br>var aListItems = yud.getElementsByClassName( <br>"draggable ", //CSS 클래스 "draggable"이 있는 항목만 가져오기<br>"li", //목록 항목만 반환<br>elList //변경된 요소의 하위 항목으로 검색 제한<br>); <br> return aListItems; <br>} <br>//이 반환된 객체는 YAHOO.myProject.myModule이 됩니다: <br>return { <br>aDragObjects: [], //외부 액세스 가능, 스토리지 DD 객체 <br>init: function () { <br>//DOM이 완전히 로드될 때까지 목록 항목을 드래그할 수 없습니다: <br>yue.onDOMReady(this.makeLIsDraggable, this, true) <br>}, <br>makeLIsDraggable: function () { <br>var aListItems = getListItems(); //드래그할 수 있는 요소<br>for (var i=0, j=aListItems.length; i<j; i ) { <br>this.aDragObjects .push(new YAHOO.util.DD(aListItems[i])); <br>} <br>} <br>} <br>}()//위 코드가 실행되었으므로 init 메소드에 즉시 액세스할 수 있습니다: <br></script>
이것은 의도적으로 자세히 설명한 것입니다. 이런 식으로 하면 의심할 여지 없이 더 컴팩트하게 만들 수 있을 것입니다. 이 패턴은 프로젝트가 더욱 복잡해지고 API가 증가함에 따라 확장됩니다. 이러한 방식으로 전역 네임스페이스를 피하고 외부에서 액세스 가능한 API 메서드를 제공하며 보호되거나 "개인" 데이터 및 메서드를 지원합니다.