2012-06-07 3 views
1

내 기본 설정은 익명의 자동 호출 기능에서 자바 스크립트의 전체 힙입니다 :방화범과 자기 호출하는 익명 함수

(function() { 
    ... 
})(); 

내 문제는 내가 내 개체에 대한 액세스를 얻을 수없는 것이다 이 ASI 기능은 DOM 탭을 통해 작동합니다. 나는 다음 두 가지를 시도했다.

var MYAPP = function() { 
    ... 
}; 

var MYAPP = (function() { 
    ... 
})(); 

첫 번째 화재는 전혀 발생하지 않았다. 두 번째 방금 MYAPP는 DOM 탭에 undefined입니다.

이 방법이 있습니까?

+0

두 번째 양식을 반환 했습니까? – wong2

+0

@ wong2 아니, 아무것도 돌려주지 않습니다. 네임 스페이스를 만드는 것입니다. – Nick

답변

2

첫 번째 버전에서는 단순히 이름이 MYAPP 인 함수를 만들었지 만 실행하지는 않습니다.

두 번째 버전에서는 함수가 실행되고 결과는 MYAPP에 할당됩니다. 하지만 함수가 아무 것도 반환하지 않는 것 같습니다. 따라서 MYAPP은 정의되지 않은 채로 있습니다.

이 패턴에 대한 설명은 YUIBlog의 A Javascript Module Pattern을 참조하십시오. 그들의 예는 다음과 같습니다 :

YAHOO.myProject.myModule = function() { 

    return { 
     myPublicProperty: "I'm accessible as YAHOO.myProject.myModule.myPublicProperty.", 
     myPublicMethod: function() { 
      YAHOO.log("I'm accessible as YAHOO.myProject.myModule.myPublicMethod."); 
     } 
    }; 

}(); // the parens here cause the anonymous function to execute and return 

그래서 함수는 기본적으로 모든 public 멤버를 포함하는 객체를 반환합니다. 그런 다음 Firebug로 액세스 할 수 있습니다.

+0

감사합니다. Crockford는 비슷한 패턴을 가지고 있습니다 만, 나는이 정도까지는 사용하지 않을 것이라고 생각했지만 기억했습니다. – Nick