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 相关文章推荐
Prototype Array对象 学习
Jul 19 Javascript
回车直接实现点击某按钮的效果即触发单击事件
Feb 27 Javascript
再谈javascript原型继承
Nov 10 Javascript
js淡入淡出的图片轮播效果代码分享
Aug 24 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
Jan 04 Javascript
利用JS实现简单的日期选择插件
Jan 23 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
Apr 13 Javascript
3种vue组件的书写形式
Nov 29 Javascript
解决Mac node版本升级失败的问题
May 16 Javascript
修改vue+webpack run build的路径方法
Sep 01 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
Oct 26 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 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
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现线程池代码分享
2015/06/21 Python
python之PyMongo使用总结
2017/05/26 Python
HTML的form表单和django的form表单
2019/07/25 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
监察建议书范文
2014/03/12 职场文书
校庆口号
2014/06/20 职场文书
作风建设年活动总结
2014/08/27 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
小英雄雨来观后感
2015/06/09 职场文书
公证书
2019/04/17 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
Python使用pyecharts控件绘制图表
2022/06/05 Python