2010-06-27 7 views
4

javascript에서 자체 호출 함수에 대한 질문이 있습니다.javascript 새로운 자체 호출 함수

alert(myNamespace.HelpModule.abc); 

을하지만 우선 jsLint은 '아무튼 : 내가 뭘하는지

지금은과 같이 myNamespace.HelpModule의 속성에 액세스 할 수있어 다음

myNamespace = {}; //namespace for holding any objects/functions 

//helpModule as an example 

myNamespace.HelpModule = new (function(){ 
    this.abc = '123'; 
    //lots of other code in here... 
})(); 

비슷한입니다 "이상한 건설. 삭제 '새로운'.", 그리고이 page 당신이 함수 생성자를 사용해서는 안된다고하지만,이 경우에는 함수 생성자를 자체 호출 함수로 사용했는지 확신 할 수 없지만 ?

어쨌든, 그것은 잘 작동하는 것, 그리고 내가 그것을 사용하는 이유는 전역 개체 (창) 대신 "this"범위를 갖는 것입니다. 난 그냥 객체 리터럴로 정의하거나 할 비슷한

myNamespace.HelpModule = (function(){ 
    var obj = {}; 
    obj.abc = '123'; 

    return obj; 
}(); 

에 그러나이 중 어느 것도 나에게 "우아한"로 보일 수있다.

이것이 잘못된 형식인지/연습인지 궁금합니다.

+0

쿨 방법을 사용할 수 있습니다, 그 본 적이! –

답변

5

생성자를 정의하는 목적이 많은 객체를 생성하기 위해 그것을 재사용 할 수 있기 때문에 이상합니다. 당신의 목적을 위해

, 당신은 모듈을 정의의

구조체 -
myNamespace.HelpModule = (function(){ 
    //private stuff here 
    var a = 100; 
    return { 
     //public stuff here 
     b : 200, 
     something: function() { 
      return a + this.b; 
     } 
    }; 
})(); 
+0

흠 음, 내 두 번째 코드 예제와 비슷하지만 좀 더 우아합니다. 하지만 개체 리터럴에 대한 문제는 예를 들어 jQuery를 사용하여 $ B를 사용하여 개체에 일부 이벤트를 바인딩하려는 경우를들 수 있습니다. 개체가 정의 될 때까지 기다려야하고, 경우에 따라 $ (myNamespace.HelpModule) .bind ('myEvent', function() {etc ..}); 자체 호출 함수 후. 그래서 코드 자체가 멋지게 포함되어 있지 않습니다. – Okeydoke

관련 문제