2012-02-16 4 views
1

클로저 만들기는 쉽지만 사용하기 쉽습니다. 여기 내 폐쇄입니다. 일단 doWork, calculateThis, doAnimation 등의 작업을 호출 할 수 있어야하지만 클로저 내부의 함수에 액세스하는 방법은없는 것처럼 보입니다.기존 클로저에서 작업을 수행하려면 어떻게해야합니까?

function worker(input) { 
    return function() { 
     doWork = function() { 
      alert("doing work"); 
     }; 
    } 
} 

function caller() { 
    var myWorker = worker(); 
    myWorker.doWork(); // this fails 
} 

* 귀하가 묻는 질문은 주관적인 것으로 보이며 닫힐 수 있습니다. - 다시 한번 감사

+0

불분명 :

다음은 후에 아마있어거야. worker()를 호출하면 함수가 반환되므로 자연스럽게 myWorker.doWork()가 실패합니다. I * think()는 factory() 메소드를 factory 메소드로 사용하려고 시도하기 때문에 리턴되는 익명의 함수는 기괴한 생성자의 일종이지만 코드는 온통 일종의 것이다. 이 코드의 목적을 이해하는 것이 도움이 될 것입니다. – PlayDeezGames

답변

4

가 나는 이것이 당신이 요구하는 무엇이라고 생각 유래 :

function worker(input) { 
    return { 
     doWork: function() { 
      alert("doing work"); 
     }, 
     doAnimation: function() { 
      alert("animating"); 
     } 
    } 
} 

이제 당신의 코드를 사용하여 호출 할 수 있습니다 : 코드는 정말 클로저를 사용하지 않는 것을

var myWorker = worker(); 
myWorker.doWork(); 
myWorker.doAnimation(); 

주 하지만이 중 하나는 다음과 같습니다.

function worker(input) { 
    return { 
     doWork: function() { 
      alert("doing work: " + input); 
     }, 
     doAnimation: function() { 
      alert("animating: " + input); 
     } 
    } 
} 

var workerA = worker('A'); 
var workerB = worker('B'); 
workerA.doWork(); 
workerB.doAnimation(); 

차이점을 확인할 수 있습니까?

1

work() 메서드를 실행하려고했지만 예제에서는 "work"속성이 아닌 함수를 반환합니다. 당신이 뭘 하려는지

function worker(input) { 
    return { 
     work: function() { 
      alert("doing work"); 
     }; 
    } 
} 
+0

당신은 두 신입니다. 도움을위한 thx –

관련 문제