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 相关文章推荐
从新浪弄下来的全屏广告代码 与使用说明
Mar 15 Javascript
基于jQuery的试卷自动排版系统实现代码
Jan 06 Javascript
jQuery $.get 的妙用 访问本地文本文件
Jul 12 Javascript
Jquery 表单验证类介绍与实例
Jun 09 Javascript
原生javascript实现的分页插件pagenav
Aug 28 Javascript
AngularJS入门教程之AngularJS模型
Apr 18 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 Javascript
vue实现底部菜单功能
Jul 24 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
Oct 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
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
[原创]图片分页查看
2006/08/28 Javascript
FCK调用方法..
2006/12/21 Javascript
JS input 数字验证代码
2009/07/30 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
vue之浏览器存储方法封装实例
2018/03/15 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
小程序实现长按保存图片的方法
2019/12/31 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
python实现126邮箱发送邮件
2020/05/20 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
逃课上网检讨书
2014/02/20 职场文书
求职信格式要求
2014/05/23 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
新郎新娘致辞
2015/07/31 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
vue 实现上传组件
2021/05/31 Vue.js
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python