>  기사  >  웹 프론트엔드  >  JavaScript는 setInteval의 함수 매개변수에서 이를 특정 object_javascript 팁으로 지정합니다.

JavaScript는 setInteval의 함수 매개변수에서 이를 특정 object_javascript 팁으로 지정합니다.

WBOY
WBOY원래의
2016-05-16 18:35:411018검색

이 질문을 보고 당시에 문제가 해결되지 않아 혼란스러웠습니다. 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() 함수에서 이를 참조할 수 있습니다. 현재 객체를 정상적으로 사용하고 현재 객체의 변수와 메소드를 사용하는 것이 매우 편리하지 않습니까?
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.