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 相关文章推荐
从盛大通行证上摘下来的身份证验证js代码
Jan 11 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
Sep 04 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
使用JavaScript实现连续滚动字幕效果的方法
Jul 07 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
Dec 26 Javascript
js剪切板应用clipboardData实例解析
May 29 Javascript
Bootstrap页面布局基础知识全面解析
Jun 13 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
May 30 Javascript
react-native滑动吸顶效果的实现过程
Jun 03 Javascript
用vue 实现手机触屏滑动功能
May 28 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
详细讲解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
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
Python多线程学习资料
2012/12/19 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python中异常重试的解决方案详解
2017/05/05 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
python计算二维矩形IOU实例
2020/01/18 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
Django多数据库联用实现方法解析
2020/11/12 Python
python实现经纬度采样的示例代码
2020/12/10 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
驾驶员岗位职责
2014/01/29 职场文书
五型班组建设方案
2014/02/10 职场文书
揭牌仪式主持词
2014/03/19 职场文书
工作所在部门证明
2014/09/21 职场文书
初中运动会前导词
2015/07/20 职场文书
2016党校培训心得体会
2016/01/07 职场文书
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers