http://jsfiddle.net/mplungjan/SyHFR/
对于凌乱的代码感到抱歉 - 我修改了一个我未选择并且最初来自Dynamic Drive的脚本 - 它被我正在帮助的人使用,而不是从头开始重写整个事情,我同意了功能蠕变。预期的更改是通过vars添加重复和延迟
现在我只想了解可能存在问题的地方 - 我每隔一秒就使用一个日期对象更改代码,仅在初始化时使用它。
代码
cdtime.prototype.updateTime=function(){
var thisobj=this;
this.currentTime+=1000; // one second
setTimeout(function(){thisobj.updateTime()}, 1000) //update time every second
}
给出
消息:'thisobj'为空或不是对象
在XP上的IE8中大约9个小时后我周末在另一个盒子上自己运行它,但是想知道是否有人可以告诉我IE的问题可能是什么。
HMM - 现在粘贴功能,我看到settimeout在原型中 - 突然看起来不正确。
也请随意指出一个更好的计数器,它可以做到这一点,例如延迟后开始,在给定时间后重复,并在CSS设置的页面上有多个计数器。
更新
尝试使用setInterval会使整个coundown变得非常不稳定 http://jsfiddle.net/mplungjan/z2AQF/
答案 0 :(得分:1)
如果确实是内存泄漏,请尝试从传递给thisobj
的函数中清除setTimeout
变量:
cdtime.prototype.updateTime = function () {
var thisobj=this;
this.currentTime+=1000; // one second
setTimeout(function () {
thisobj.updateTime();
thisobj = null;
}, 1000); //update time every second
};
如果你仔细观察,这个函数基本上是一个区间,所以下面会更加优化,因为它不会叠加在旧函数上:
cdtime.prototype.updateTime = function () {
var thisobj = this;
setInterval(function () {
thisobj.currentTime += 1000;
}, 1000);
};