2013-10-06 5 views
0

App이라고하는 메인 함수를 작성하려고합니다. 아래에는 공개 및 비공개 기능이 있습니다. 아래의 코드를 참조하십시오. 모듈 식으로 작성하고 싶습니다.Jquery 모듈 형 함수 작성

문제는 내가 공공 기능에 일부 개인 기능을 매핑 할 그리고 난 그렇게 할 수없는 생각이다. 예를 들어

;

_A() 개인 기능을 호출해야하며 App.ModuleA.fun_1과 같은 공용 기능에 대한 액세스 권한을 부여 받으려면 App.ModuleA으로 전화를 걸고 싶습니다.

나는 그것이 작동 할 수 있도록 알고

; _A()를 공개해야합니다. 하지만 기능을 매핑 할 수 있습니까?

어떻게 같은 매핑을 달성 할 수 있습니까? 어느 누구도 더 나은 코딩 구조를 제안 할 수 있습니까? 그렇다면 앱 내의 서브 함수와 퍼블릭 함수에 액세스 할 수 있습니까? 당신의 예에서

return _A(); 
// change to: 
return _A; 

:

var _A = function() { 
    //... 
}(); 

// change to: 
var _A = function() { 
    //... 
}; 

또는 : 나는 당신이 두 가지 변화 중 하나를 만들 필요가 App.ModulaA();

var App = function() { 
     // App Private Functions 
     var _A = function() { 
      return { 
       fun_1: function() { 
        alert("_A.fun_1"); 
       }, 
       fun2: function() { 
        alert("_A.fun2"); 
       } 
      }; 
     }(); 
     // App Public Functions 
     return { 
      init: function() { 
       alert("App.init"); 
      }, 
      ModulaA: function() { 
       return _A(); // doesnot work 
       // return this._A(); // doesnot work     
      } 
     }; 
    }(); 

App.ModulaA(); 

답변

2

_A() 자기 호출 기능, 따라서 괄호를 제거,`here

}() <---- remove parenthesis 
+0

당신이 설명 할 수 동작에서 볼되지 않은''}()'''이 목적? 자기 호출이 의미하는 것은 무엇입니까? 앱 정의에서 유용하지만 하위 함수 _a에서는 유용하지 않습니다. – django

+0

그 대괄호는 기능을 즉시 실행하여 DRY가이 [link] (http://peter.michaux.ca/articles/an-important-pair-of-parens)를 참조하여 설명을 유지하도록합니다. – Max

1

를 호출 할 때 지금은 오류 TypeError: _A is not a function 무엇입니까 들어

_A은 이미 평가되었으므로 더 이상 기능이 아닙니다.

1
var App = function() { 
    //App Private Functions 
    var _A = function() { 
     return { 
      fun_1: function() { 
       alert("_A.fun_1"); 
      }, 
      fun2: function() { 
       alert("_A.fun2"); 
      } 
     }; 
    }, 
    init = function() { 
     alert("App.init"); 
    }, 
    ModulaA = function() { 
     return _A(); 
    }; 

    // App Public Functions 
    return { 
     init: init, 
     ModulaA: ModulaA 
    }; 
}(); 

var moduleA = App.ModulaA(); 
moduleA.fun_1(); //Works 
moduleA.fun2(); //Works