手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript让setInteval里的函数参数中的this指向特定的对象
javascript让setInteval里的函数参数中的this指向特定的对象
摘要:看到这个题,我蒙了,因为那时候我不清除这个问题,想了半天没想出来,后来到网上一查,在国外的某网站查到说setInterval和setTime...

看到这个题,我蒙了,因为那时候我不清除这个问题,想了半天没想出来,后来到网上一查,在国外的某网站查到说setInterval和setTimeout之后的函数的作用域是全局的,也就是里面的this指向的是全局对象.

这个问题可麻烦了,我经常要在循环函数里用this来引用当前对象,也许你想到可以用闭包,不过实际情况并非如此简单,对象实例多了之后,闭包也乱套了.

我的愿望就是让循环函数里的this仍然指向当前上下文的对象,无需传参数,无需闭包(其实这也是闭包,只是形式上看着比较自然而已);

例如:(一部分代码,作用是定时发送请求)

复制代码 代码如下:

var sendRequest=function(){}

sendRequest.prototype={

.............................

.............................

beginSend:function(){

//使循环函数里的this指向本对象,而不是全局对象

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;i<j;i++){

post_data+="&content[]="+this.data_wait_for_send[i];

}

this.data_wait_for_send=[]

}

// debug(post_data)

var que = Connect.asyncRequest('POST', this.options.getUrl, callback,post_data);

},

......................

......................

}

如此,在sendARequest()函数里,我们可以正常使用this来引用当前对象,使用当前对象的变量和方法,这样岂不是很方便?

【javascript让setInteval里的函数参数中的this指向特定的对象】相关文章:

javascript的 {} 语句块详解

javascript实现查找数组中最大值方法汇总

javascript实现table表格隔行变色的方法

javascript基础知识分享之类与函数化

Javascript调用XML制作连动下拉列表框

JavaScript中停止执行setInterval和setTimeout事件的方法

详解Javascript中的Object对象

javascript的函数第1/3页

JavaScript中指定函数名称的相关方法

理解javascript定时器中的setTimeout与setInterval

精品推荐
分类导航