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 相关文章推荐
云网广告中的代码,提示出错,大家找找
Nov 21 Javascript
JS打开图片另存为对话框实现代码
Dec 26 Javascript
js中同步与异步处理的方法和区别总结
Dec 25 Javascript
jquery操作select方法汇总
Feb 05 Javascript
Javascript原型链的原理详解
Jan 05 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
Feb 26 Javascript
vue初始化动画加载的实例
Sep 01 Javascript
JS实现transform实现扇子效果
Jan 17 Javascript
纯JS开发baguetteBox.js响应式画廊插件
Jun 28 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 flush类输出缓冲剖析
2008/10/19 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
php微信公众号开发之简答题
2018/10/20 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
js实现tab切换效果
2017/02/16 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Python @property装饰器原理解析
2020/01/22 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
初一学生评语大全
2014/04/24 职场文书
2016年情人节问候语
2015/11/11 职场文书
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers