2014-08-31 2 views
0

javascript 네임 스페이스에 문제가 있습니다.Ajax 콜백 함수에서 메소드를 호출하는 좀 더 우아한 방법

아약스 콜백 함수에서 secondMethod를 호출하고 싶지만 참조를 얻는 방법을 모르겠습니다. 나는 그것을 그렇게 좋아했다. 하지만 thisReference 변수는 나에게 어색한 것 같습니다. 그리고 전체적인 구조는 읽기가 어렵습니다.

그래서 저는 도움을 위해 글을 쓰고 있으며, 더 나은 재 작성 방법에 대한 답변을드립니다.

var testObject = new TestObject(); 
testObject.firstMethod("hello world!"); 

function TestObject() { 
    var thisReference = this; 

    this.firstMethod = function(firstParam) { 
     ajaxFunc(firstParam, function(ajaxResult) { 
      thisReference.secondMethod(ajaxResult); 
     }); 
    }; 

    this.secondMethod = function(secondParam) { 
     alert("secondMethod " + secondParam); 
    }; 

} 

function ajaxFunc(hello, callBack) { 
    callBack(hello); 
} 

고마워요. 당신이 무슨 일을하는지와 같은

온 드라

답변

0

뭔가를 할 수있는 일반적인 방법입니다. 사용 :

var that = this; 

또는 :

var self = this; 

일반적인 이름입니다 것은 원래 범위의 보류를 유지합니다.

다른 옵션 (내가 선호하는)은 호출하는 메소드에 this 객체를 바인딩하여 콜백에서 액세스 할 수 있도록하는 것입니다. 그러면 다음과 같이 보입니다.

this.firstMethod = function(firstParam) { 
    ajaxFunc(firstParam, function(ajaxResult) { 
    this.secondMethod(ajaxResult); 
    }.bind(this)); 
}; 

희망이 있습니다.

+0

대신'ajaxFunc (firstParam, this.secondMethod.bind (this)) '를 사용하십시오. – Bergi

+0

빠른 답변 Antiga. 바인딩()이 좋아 보인다. Bergi : 감사합니다. 하지만 secondMethod를 호출하기 전에 더 많은 코드를 작성할 수 있기 때문에 필자는 그렇게 할 수 없습니다. 그것의 단순화 된 코드. –

관련 문제