2013-07-18 2 views
0

저는 자바 스크립트를 클래스 파일로 분리하고 싶습니다. 나는 최근에 함수가 객체의 일부이기 때문에 점 표기법을 통해 다른 자바 스크립트 파일 액세스의 콜백 함수를 제공 할 수 있어야 할 필요성을 알게되었습니다.발신 범위에서 콜백 함수를 실행하십시오.

예를 들어 MyObject라는 객체가 있고 doSomething이라는 함수가 있고 doSomething 함수에 대한 콜백이 필요하지만 다른 클래스 파일에서 객체의 인스턴스를 만들고 있습니다. 콜백을 클래스 파일에 전달하면 해당 범위에서 실행되고 원래 파일의 범위에서는 실행되지 않습니다.

FirstObject = function(options){ 

    var FirstObject = this; 
    FirstObject.something = "somevalue"; 

    FirstObject.MyObject = new MyObject(); 
    FirstObject.MyObject.doSomething(param1, function(){//I need to be able to reference FirstObject.something here}); 
} 

나는 내가 좋아하는, 두 번째에서 이벤트를 발사하여이 작업을 수행 할 수 있습니다 알고 : 원래 문서에 이것에 대한 $(document).trigger("doSomething-Finished") 듣고,하지만 난 더 직접 액세스 할 수 싶습니다. 이 기능은 jQuery 콜백과 작동하므로 가능해야한다고 생각합니다.

는이 질문에 대한 답 본 적이 : scope when doing OO javascript callbacks

을하지만 난 정말 정확하게 그가 용액에 일을 어떻게 내 특정 상황을 구현하는 것입니다 무엇을 이해하지 않습니다.

+0

합니다. 그 함수에서'FirstObject.something'을 참조 할 수 있습니까? 당신은 단지'this'를 사용할 수 없습니다. – Bergi

+0

(variable) * scope *를 ['this'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) * context *와 혼동하지 마십시오! – Bergi

답변

1

당신은 MDN documentation를 참조하여 원하는 범위가 올바르게 설정되어 있는지 확인하는 콜백 함수에 ES5 "바인딩"방법을 사용할 수 있습니다.

FirstObject = function(options){ 

    var FirstObject = this; 
    FirstObject.something = "somevalue"; 

    FirstObject.MyObject = new MyObject(); 

    var callback = function(){ 
     // "this" will be a reference to FirstObject, thanks to "bind" call below 
    }; 

    FirstObject.MyObject.doSomething(param1, callback.bind(FirstObject)); 
} 

FirstObject에 대한 참조를 유지하는 또 다른 방법은 단순히 종속성 삽입을 사용하는 것입니다. 다음은 생성자 주입을 사용하는 예입니다하지만 당신은 또한 세터 기능을 사용할 수 있습니다 이해가 안

FirstObject = function(options){ 

    var FirstObject = this; 
    FirstObject.something = "somevalue"; 

    // pass FirstObject to sub object constructor 
    // note that MyObject needs to store the reference for later use 
    FirstObject.MyObject = new MyObject(FirstObject); 


    FirstObject.MyObject.doSomething(param1, function(){//I need to be able to reference FirstObject.something here}); 
} 
0

당신은 당신의 객체에 기능을 결합 할 수 있습니다

FirstObject = function(options){ 

    var FirstObject = this; 
    FirstObject.something = "somevalue"; 

    FirstObject.MyObject = new MyObject(); 
    FirstObject.MyObject.doSomething(param1, callback_function.bind(FirstObject.something)); 

    function callback_function(){ 
     // this will be FirstObject.something here 
    } 
} 
관련 문제