有人可以帮助我纠正与setInterval
相关的问题吗?我对JavaScript很新,我不确定这里有什么问题。我的页面中有这个块:
GlobalTicker.prototype.TickElements = function () {
this.timer = setInterval(this.initializeElement.apply(this) , 1000);
};
GlobalTicker.prototype.initializeElement = function () {
for (var i = 0; i < this.tickerElements.length; i++) {
var existingRun = this.tickerElements[i].secs;
var elementId = $('#' + this.tickerElements[i].id + ' .comment-editor').find('.ticker');
existingRun -= 1;
$(elementId).text(existingRun);
if (existingRun === 0) {
$(elementId).remove();
this.tickerElements.splice(i, 1);
if (this.tickerElements.length == 0) clearInterval(this.tickerElements.timer);
}
}
};
然后在代码的某处,我在函数
中进行了这个调用var objTicker = new GlobalTicker();
CommentManagement.prototype.createComment = function (domObject) {
objTicker.TickElements();
};
此函数调用实际调用setInterval
函数并运行第一次迭代并跳转到initialiseComment();
但是一旦执行此块,则在下一个时间间隔执行,而不是执行initialiseComment();
再次,它跳回我的函数调用CreateComment();
。我在这做错了什么?
答案 0 :(得分:3)
setInterval()
需要函数引用。您正在调用函数本身并将执行函数(undefined
)的返回结果传递给setInterval()
。由于该返回值不是函数,因此setInterval()
没有回调函数来调用。因此,您的方法在您第一次调用时执行了一次,但无法按间隔调用。
要解决此问题,您应该改变:
this.timer = setInterval(this.initializeElement.apply(this) , 1000);
到此:
var self = this;
this.timer = setInterval(function() {self.initializeElement()}, 1000);
请注意,this
回调中的setInterval()
值也会与您想要的值不同,因此您想要的值会保存在self
中,因此可以从那。在这种情况下也不需要使用.apply()
因为调用对象上的方法会根据需要自动设置this
指针。