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 获取元素位置的快速方法 getBoundingClientRect()
Nov 26 Javascript
表单元素的submit()方法和onsubmit事件应用概述
Feb 01 Javascript
密码框显示提示文字jquery示例
Aug 29 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 Javascript
js实现简易垂直滚动条
Feb 22 Javascript
基于AngularJs select绑定数字类型的问题
Oct 08 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
微信小程序实现圆形进度条动画
Nov 18 Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 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
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
Cookie 小记
2010/04/01 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
微信小程序的生命周期的详解
2017/10/19 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
python实现音乐下载的统计
2018/06/20 Python
python如何制作缩略图
2019/04/30 Python
详解Django CAS 解决方案
2019/10/30 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
2020/01/09 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
转党组织关系介绍信
2014/01/08 职场文书
个人对照检查材料
2014/02/12 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
入党推优材料
2014/06/02 职场文书
工作推荐信模板
2015/03/25 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android