今天在写个小东西的时候,用到setInterval:
var ret = setInterval(func, 1000);
打印这个返回的“句柄”ret,发现是一个number类型数字。经过搜索,这个返回值应该称为ID标识,用来表示推入栈的函数。
所以在之后多设置一些setTimeout和setInterval,他们的返回值是越来越大的。
不过我想,既然返回的ID标识是一个数字,那么我在clearTimeout和clearInterval中直接传入一个数字,还能不能有效呢?
经过试验,果然有效……比如ret返回的ID值是12,我执行clearInterval(12)后,这个定时调用就失效了。
另外,我是在一个对象的方法中调用setInterval,而定时调用的那个函数也是这个对象的一个方法,所以涉及到this的指向问题。
我们知道,在setInterval和setTimeout中定时执行的函数,其实是在全局下调用的,所以this是指向window的。那么像我这个情况,我应该怎么才能正确的调用指定对象的方法呢?
其实就是用call(或apply)了,请看:
var _this = this;
var interval = setInterval(function(){
myObject.prototype.myFunc.call(_this);
}, 1000);
这样就能正确的调用了。
呼~~~