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 相关文章推荐
准确获得页面、窗口高度及宽度的JS
Nov 26 Javascript
网上抓的一个特效
May 11 Javascript
用jscript启动sqlserver
Jun 21 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
jQuery中noconflict函数的实现原理分解
Feb 03 Javascript
详解JavaScript中setSeconds()方法的使用
Jun 11 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
Javascript 判断两个IP是否在同一网段实例代码
Nov 28 Javascript
微信小程序实现动态获取元素宽高的方法分析
Dec 10 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 Javascript
JS实现简单打字测试
Jun 24 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
PHP+DBM的同学录程序(4)
2006/10/09 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php编程每天必学之验证码
2016/03/03 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python简单分割文件的方法
2015/07/30 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
雪山饭庄的创业计划书范文
2014/01/18 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
小学运动会演讲稿
2014/08/25 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL