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 相关文章推荐
JavaScript CSS修改学习第一章 查找位置
Feb 19 Javascript
js点击button按钮跳转到另一个新页面
Oct 10 Javascript
Bootstrap图片轮播组件使用实例解析
Jun 30 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
JavaScript中this的用法实例分析
Dec 19 Javascript
vue.js利用defineProperty实现数据的双向绑定
Apr 28 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
JavaScript requestAnimationFrame动画详解
Sep 14 Javascript
删除table表格行的实例讲解
Sep 21 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
Sep 03 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查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
python中函数默认值使用注意点详解
2016/06/01 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
Python wordcloud库安装方法总结
2020/12/31 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
行政工作个人的自我评价
2014/02/13 职场文书
高中运动会入场词
2014/02/14 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
最美乡村教师观后感
2015/06/11 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL