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 相关文章推荐
在线游戏大家来找茬II
Sep 30 Javascript
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
Js操作树节点自动折叠展开的几种方法
May 05 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
jQuery双向列表选择器select版
Nov 01 Javascript
jq给页面添加覆盖层遮罩的实例
Feb 16 Javascript
vue.js树形组件之删除双击增加分支实例代码
Feb 28 Javascript
Vuejs实现购物车功能
Nov 05 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
Jul 23 jQuery
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
Jan 09 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
Aug 09 Javascript
vue+iview实现文件上传
Nov 17 Vue.js
详细讲解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
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
小程序实现投票进度条
2019/11/20 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
Python入门篇之函数
2014/10/20 Python
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
详解如何减少python内存的消耗
2019/08/09 Python
雷蛇美国官网:Razer
2020/04/03 全球购物
艺术设计专业个人求职信
2013/09/21 职场文书
班级活动策划书
2014/02/06 职场文书
集中整治工作方案
2014/05/01 职场文书
市场部岗位职责范本
2015/04/15 职场文书
杨善洲电影观后感
2015/06/04 职场文书
卫生主题班会
2015/08/14 职场文书