2012-03-24 7 views
4

네임 스페이스의 최상위 방법 내부의 개인 기능은 다음 내가 myNamespace.run() 같은 XUL 스크립트 내부에서 호출 할 수 있습니다 run()라는 방법이있다 getSelText()myNamespace.run() 안에 넣고 getSelText()myNamespace의 또 다른 최상위 기능으로 선언 할 필요가 없습니다. 대신, myNamespace.run() 안에있는 개인적인 방법과 같아야합니다. 나는이 스크립트를 실행하면OOP, 내가 네임 스페이스를 선언하는 JS 스크립트를

나는 오류가 나타납니다

getSelText is not a function.

내가 자바 스크립트에 꽤 새로 온 사람을, 그래서 나는이 디자인의 가장 좋은 방법을 모른다. 제가 시도하고있는 것을 달성 할 수 있습니까? 내가 잘못된 방향으로가는거야?

감사합니다.

답변

4

getSelTextvar으로 선언하면 사용하는 진술보다 먼저 사용해야합니다. 단지 var getSelText = ... 문을 run 함수의 첫 번째 문으로 만듭니다.


참조 정보 :

var가에서 선언되고있는 기능의 정상에 "게양"되는 자바 스크립트의 문, 그래서이 :

function() { 
    var a = 42; 
    // Other stuff... 
    var b = 23; 
} 

정말이 의미 :

function() { 
    var a = 42, b; 
    // Other stuff... 
    b = 23; 
} 

아니스 식을 기능 반대 어 자바 스크립트와 유사한 구조는 함수 문은 다음과 같습니다

function() { 
    var fn1 = function() { return fn2(); }; // Function expression 
    alert(fn1()); 

    // Function statement 
    function fn2() { 
     return "Hello from fn2"; 
    } 
} 

당신은 위의 코드 실행 한 경우, 그것은 것 "Fn2를에서 안녕"성공적으로 경고. 이것은 함수 문장이 선언 된 범위 내의 다른 명령문보다 먼저 tip-top에 올라와 있기 때문입니다. 알 수 있듯이, 이것은 매우 혼란 스러울 수 있습니다. 함수 식을 사용하고 필요한 순서로 선언하는 것이 최선의 방법 일 것입니다.

+1

정보 주셔서 감사합니다! 또한 var 문없이 함수를 선언하고 run() 내부에서 호출 할 수 있음을 알게되었습니다. – bobbyrne01

+0

하나의 작은 nitpick이 변수가 위쪽으로 끌어 올려 지지만 초기화는 수행되지 않습니다. "b stuff"은 "다른 것들"이 그것을 접근한다면 당신의 예제에서'undefined'입니다. 그런 다음 '23'으로 설정됩니다. 함수 문을 작성하기 전에 함수 구문을 사용할 수 있습니다 (범위 내에 있음). –

+0

고마워요! 나는 대답을 고쳤다. – FishBasketGordo

7

모듈 패턴이라고합니다. 즉시 호출되고 공용 인터페이스를 반환하는 익명 함수 (범위 지정 용)를 만듭니다.

var myNamespace = (function() { 
    // private functions for your namespace 
    var getSelText = function() { 
     ... 
    }; 

    return { 
    run: function() { 
     var selectedText = getSelText(); 
     alert (selectedText); 
    } 
    }; 
})()