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代码必备[js多浏览器兼容写法]
Oct 29 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
js select option对象小结
Dec 20 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
node.js中的buffer.slice方法使用说明
Dec 10 Javascript
浅谈JavaScript中的this指针和引用知识
Aug 05 Javascript
微信小程序Redux绑定实例详解
Jun 07 Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
Vue完整项目构建(进阶篇)
Feb 10 Javascript
使用vuepress搭建静态博客的示例代码
Feb 14 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 Javascript
js 函数性能比较方法
Aug 24 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 无极分类(递归)实现代码
2010/01/05 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
a标签调用js的方法总结
2019/09/05 Javascript
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
python爬虫的工作原理
2017/03/05 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
详解Scrapy Redis入门实战
2020/11/18 Python
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
历史学专业推荐信
2013/11/06 职场文书
公司道歉信范文
2014/01/09 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
论文指导教师评语
2014/04/28 职场文书
法制宣传教育方案
2014/05/09 职场文书
本科生求职信
2014/06/17 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
神龙架导游词
2015/02/11 职场文书
2016年母亲节广告语
2016/01/28 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
MySQL数据库完全卸载的方法
2022/03/03 MySQL
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
Redis实现订单过期删除的方法步骤
2022/06/05 Redis