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刷新框架外页面七种实现代码
Feb 18 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
ajax异步请求详解
Jan 06 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
Jquery获取radio选中的值
May 05 jQuery
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
详解基于vue-router的动态权限控制实现方案
Sep 28 Javascript
浅谈Koa服务限流方法实践
Oct 23 Javascript
基于vue 动态加载图片src的解决方法
Feb 05 Javascript
Angular4集成ng2-file-upload的上传组件
Mar 14 Javascript
简述vue状态管理模式之vuex
Aug 29 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
Nov 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教程 预定义变量
2009/10/23 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
Python对文件操作知识汇总
2016/05/15 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
Python KMeans聚类问题分析
2018/02/23 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
JNI的定义
2012/11/25 面试题
生活小常识广播稿
2014/09/16 职场文书
期末复习计划
2015/01/19 职场文书
小学语文教学随笔
2015/08/14 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
浅谈MySQL user权限表
2021/06/18 MySQL