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 相关文章推荐
图片完美缩放
Sep 07 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
Angularjs中controller的三种写法分享
Sep 21 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 Javascript
vue-router路由懒加载和权限控制详解
Dec 13 Javascript
element-ui 限制日期选择的方法(datepicker)
May 16 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
详解puppeteer使用代理
Dec 27 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
Apr 17 Javascript
layUI实现三级导航菜单效果
Jul 26 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
JavaScript嵌入百度地图API的最详细方法
Apr 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面向对象的用户登录身份验证
2017/06/08 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
angularJS中$apply()方法详解
2015/01/07 Javascript
js倒计时显示实例
2016/12/11 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
js+html制作简单验证码
2017/02/16 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
Python中用format函数格式化字符串的用法
2015/04/08 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python opencv之SIFT算法示例
2018/02/24 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
用python对oracle进行简单性能测试
2020/12/05 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
学生就业推荐信
2013/11/13 职场文书
入党转正介绍人意见
2015/06/03 职场文书
实习单位鉴定意见
2015/06/04 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书