javascript让setInteval里的函数参数中的this指向特定的对象


Posted in Javascript onJanuary 31, 2010

看到这个题,我蒙了,因为那时候我不清除这个问题,想了半天没想出来,后来到网上一查,在国外的某网站查到说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 相关文章推荐
JavaScript 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
May 03 Javascript
异步安全加载javascript文件的方法
Jul 21 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
Oct 09 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
学习AngularJs:Directive指令用法(完整版)
Apr 26 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 Javascript
vue项目中使用百度地图的方法
Jun 08 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
5个实用的JavaScript新特性
Jun 16 Javascript
详细讲解JS节点知识
Jan 31 #Javascript
javascript中的array数组使用技巧
Jan 31 #Javascript
jquery 批量上传图片实现代码
Jan 28 #Javascript
Jquery 常用方法经典总结
Jan 28 #Javascript
javascript 匿名函数的理解(透彻版)
Jan 28 #Javascript
JavaScript 学习笔记(十五)
Jan 28 #Javascript
Extjs 几个方法的讨论
Jan 28 #Javascript
You might like
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
33道php常见面试题及答案
2015/07/06 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
深入Python解释器理解Python中的字节码
2015/04/01 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python制作爬虫采集小说
2015/10/25 Python
python实现整数的二进制循环移位
2019/03/08 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
浅析使用Python搭建http服务器
2019/10/27 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Python项目打包成二进制的方法
2020/12/30 Python
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
运动会广播稿30字
2014/01/21 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
单位承诺书格式
2014/05/21 职场文书
股东出资证明书范例
2014/10/04 职场文书
优秀校长事迹材料
2014/12/24 职场文书
倡议书格式及范文
2015/04/29 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python
Go语言基础知识点介绍
2021/07/04 Golang