이 질문을 보고 당시에 문제가 해결되지 않아 혼란스러웠습니다. setInterval 및 setTimeout 이후의 함수 범위는 전역입니다. 즉, 이 내부는 전역 개체를 가리킵니다.
이 문제는 루프 함수에서 현재 개체를 참조하는 데 자주 사용됩니다. 클로저를 사용하지만 실제 상황은 그렇게 간단하지 않습니다. 객체 인스턴스가 너무 많으면 클로저가 지저분해집니다.
제가 원하는 것은 루프 함수에서 전달하지 않고 여전히 현재 컨텍스트의 객체를 가리키도록 하는 것입니다. 매개변수 또는 클로저(사실 이것도 클로저이지만 형식상으로는 더 자연스러워 보입니다)
예: (코드의 일부인 함수는 정기적으로 요청을 보내는 것입니다)
var sendRequest=function(){}
sendRequest.prototype={
...........................
.................. .........
beginSend:function() {
//루프 함수에서 전역 개체 대신 이 개체를 가리키도록 합니다.
this.loop_send=setInterval((function( param){
return function(){param.sendARequest();}
})(this),this.options.interval)
},
sendARequest:function(){
this.num ;
this.checkLimit();
var callback = {
success: this.handleSuccess,
failure: this.handleFail,
argument: {
handle: this,
timeout:500
}
}
var post_data="...."
//전송할 데이터가 비어 있지 않으면 데이터 일부를 가져옵니다. 출력하여 백그라운드로 전송
if(this.data_wait_for_send.length!=0){
for(var i=0,j=this.data_wait_for_send.length;ipost_data ="&content[]=" this.data_wait_for_send[i]
}
this.data_wait_for_send =[]
}
// debug(post_data)
var que = Connect.asyncRequest( 'POST', this.options.getUrl, 콜백, post_data)
},
.....
..... ...................
}
이런 식으로 sendARequest() 함수에서 이를 참조할 수 있습니다. 현재 객체를 정상적으로 사용하고 현재 객체의 변수와 메소드를 사용하는 것이 매우 편리하지 않습니까?