js之setTimeout()

将对象中使用setTimeout(),用到this指针的时候,当直接向setTimeout传入this的时候,this没有指向我理想让他指向的地方,虽然用起来不是什么难问题,但还是研究总结一下,this老复杂了:

1.setTimeout()和setInterval()

(1)setTimeout(functionname,delay)—从载入后,这个函数运行时开始经过delay(ms)的时间后执行函数functionname;
(2)setInterval(functionname,delay)—同上,然后每隔delay(ms)的时间运行一次;

2.setTimeout()用法,
(1)执行一个函数:
function a(arg){}
setTimeout(a,1000,”arg”);传递三个参数,分别是:指定函数名,延迟时间,依次传入该函数的参数
(2)还是执行一个函数:
setTimeout(“a(‘arg’)”,1000);直接把参数写里面去;这种有点类似第三种的运行一段那啥
(3)执行一段那啥:
setTimeout(“alert(‘test’);”,1000);注意引号
(4)直接写function:
setTimeout(function(){alert(‘arg’);},1000);
(5)写成这样的:我猜的,理论可行,
setTimeout(“(function(arg){alert(arg);})(‘arg’)”,1000);
运行了下还是可行,js真随便~不靠谱~
3.重点来了setTimeout()在类中的使用:
function a(){
this.b = ‘cc’;
}
a.prototype.alt = function(){
setTimeout(function(){alert(this.b);},1000);   //1000毫秒后弹出’cc’;
}
var d = new a();
d.alt();运行之后弹出的是undefined,未定义~
加了window.b = ‘dd’;后再运行,弹出dd;这里的测试方法不很严密,setTimeout里的this似乎是指向了window,和大多数的this一样。将变量self指向当前实例对象:
a.prototype.alt = function(){
var self = this;
setTimeout(function(){alert(self.b);},1000);   //1000毫秒后弹出’cc’;
}
var d = new a();
d.alt();
这回好了,应该是和setTimeout的实现有关,暂不研究,js的this需要好好研究一番,研究setTimeout显然是为了做动画,离开了jquery,真坎坷~
昨天接触到一个新的知识comet,列入日程中~
4.来个番外篇,取消setTimeout()或setInterval()
使用clearTimeout()和clearInterval()
用类似递归的方式使用setTimeout就可以实现Interval的功能,而且容易控制,setInterval是不可控制的,使用clearInterval()则可以清除间隔运行;clearInterval(‘ID’)的参数是setInterval()函数运行的返回值额。
posted @ 2011-11-16 19:06  xiaoc001  阅读(608)  评论(0编辑  收藏  举报