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生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
JS实现标签页效果(配合css)
Apr 03 Javascript
纯JS代码实现一键分享功能
Apr 20 Javascript
javascript 判断页面访问方式电脑或者移动端
Sep 19 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
详解vue的diff算法原理
May 20 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 Javascript
js中Object.create实例用法详解
Oct 05 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实现ODBC数据分页显示一例
2006/10/09 PHP
用PHP实现的生成静态HTML速度快类库
2007/03/31 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
javascript 有趣而诡异的数组
2009/04/06 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
解决python3 json数据包含中文的读写问题
2018/05/10 Python
python解决字符串倒序输出的问题
2018/06/25 Python
python实现画循环圆
2019/11/23 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
降低python版本的操作方法
2020/09/11 Python
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
致长跑运动员广播稿
2014/01/31 职场文书
大学毕业自我评价
2014/02/02 职场文书
小学毕业寄语大全
2014/04/03 职场文书
新闻报道策划方案
2014/06/11 职场文书
奥林匹克的口号
2014/06/13 职场文书
师范生见习报告范文
2014/11/03 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
员工升职自我评价
2019/03/26 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS