2012-11-14 3 views
0

나는 함께 쓰고있는 JQuery 플러그인을위한 몇 가지 기능을 제공하는 자바 스크립트 라이브러리를 만들려고한다.자바 스크립트 라이브러리 빠른 시작

저는 온라인 검색에서 다음과 같은 스켈레톤 코드를 얻었지만, 어떻게 작동하는지 완전히 알지 못합니다 (폐쇄라고 알고 있습니다). 선언을 통해 함수를 추가했습니다.

(function(window, document, $) { 

    function func_1(){ 
     return 1; 
    } 

    function func_2(){ 
     return 2; 
    } 

})(window, document, jQuery); 

그래서 그때 내가 실행과 같이 기능을 실행하려고, 내 HTML 페이지에서 소스 후 별도의 JS 파일에 위의 코드를 넣어 (참고 : 나는 JQuery와뿐만 아니라 설정이) :

<script type="text/javascript"> 
     $(document).ready(function() { 
      console.log(func_1()); 
     }); 
</script> 

그러나 Firebug (ReferenceError: func_1 is not defined)에서 오류가 발생하는 것 같습니다.

나는 두 가지 질문이 : 내 함수를 호출하려면 어떻게

  1. 을?!
  2. 다음 형식의 함수를 호출하고 싶습니다. className.functionName(). 어떻게하면 스켈레톤 코드를 재구성하여 다음과 같이 호출 할 수 있습니까? Device.func_1()?

예기치 않은 도움을 주셔서 감사합니다.

답변

2

Device.func_1(); 

클로저는 나머지 코드에서 내부 기능을 숨기는 데 사용됩니다. 당신은 명시 적으로 라이브러리의 공공 기능을 노출해야합니다

var Device = (function(window, document, $) { 
    function func_1(){ 
     return 1; 
    } 

    function func_2(){ 
     return 2; 
    } 

    var internalDevice = { 
     func_1: func_1, 
     func_2: func_2 
    }; 
    return internalDevice; // expose functionality to the rest of the code 
})(window, document, jQuery); 

(function(window, document, $) {})(window, document, jQuery); 일부가 즉시 호출 함수 표현식 (인생)라고합니다. 모든 라이브러리 함수가 전역 범위로 누출되지 않도록하는 데 사용됩니다. 그렇지 않으면 다른 라이브러리에 func_1 기능이있는 경우 덮어 쓰거나 라이브러리의 func_1을 덮어 씁니다.

함수의 인수는 라이브러리가 코드의 다른 부분에 영향을 미치고 의존하는 방식을 제어하는 ​​데 사용됩니다. 예를 들어 $ 라이브러리를 덮어 쓰면 코드에서 $를 더 이상 사용할 수 없습니다. 그러나 클로저에 로컬 참조가 있으므로 여전히 액세스 할 수 있습니다.

또는 위의 코드를 사용하여 - 객체를 반환 - 당신은 또한 글로벌 스코프에 직접 라이브러리를 지정할 수 : 뭔가 폐쇄 내부에있을 때

(function(window, document, $) { 
    ... 
    window.Device = internalDevice; // expose functionality to the rest of the code 
})(window, document, jQuery); 
+0

고맙습니다. 그것은 내가 필요한 것입니다. 건배. –

0

난 단지 질문 두 번째 대답 할 수 있지만,이 작업을 수행하여 있음을 만들 수 있습니다

var Device = { 
function func_1() 
{ 
// your first function 
}, 
function func_2() 
{ 
// your second function 
} 
}; 

그 길을 그냥 호출 할 수 있습니다 :

0

그것의 범위는 폐쇄로 변경됩니다. func_1func_2은 익명의 함수 안에서만 볼 수 있습니다.

관련 문제