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 cookies操作集合
Apr 12 Javascript
Jquery中给animation加更多的运作效果实例
Sep 05 Javascript
JavaScript中发布/订阅模式的简单实例
Nov 05 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
Aug 20 Javascript
BootStrap Fileinput的使用教程
Dec 30 Javascript
基于cookie实现zTree树刷新后展开状态不变
Feb 28 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
详解angularJS自定义指令间的相互交互
Jul 05 Javascript
Vue-cli3项目配置Vue.config.js实战记录
Jul 29 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
Sep 28 Javascript
仿照Element-ui实现一个简易的$message方法
Sep 14 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 cookis创建实现代码
2009/03/16 PHP
php入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
php中Ctype函数用法详解
2014/12/09 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
使用Python编写Linux系统守护进程实例
2015/02/03 Python
python简单贪吃蛇开发
2019/01/28 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
Python原始套接字编程实例解析
2020/01/29 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
树莓派升级python的具体步骤
2020/07/05 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
高三励志标语
2014/06/05 职场文书
好人好事新闻稿
2015/07/17 职场文书
如何利用python实现列表嵌套字典取值
2022/06/10 Python
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers