我遇到了这个jsfiddle代码段的问题:
var mainFunction = function() {
this.text;
this.repeater;
}
var repeatEvery = function(func, interval) {
var now = new Date();
var delay = interval - now % interval;
function start() {
var intervalID = setInterval(func, interval);
func(intervalID);
}
setTimeout(start, delay);
};
mainFunction.prototype.start = function(printText) {
this.text = printText;
var self = this;
var func = function(intervalID) {
if(intervalID){
this.repeater = intervalID;
}
document.getElementById('test').innerHTML += this.text + '<br/>';
};
repeatEvery(_.bind(func, this),1000);
}
mainFunction.prototype.stop = function() {
clearInterval(this.repeater);
}
var test = new mainFunction();
test.start('hello');
setTimeout(test.stop,10000);
我的目标是调用stop函数并停止start函数设置的Interval。
答案 0 :(得分:2)
你需要做
setTimeout(function(){ test.stop()}, 10000)
或
setTimeout(test.stop.bind(test), 10000); //Bind method is not available in IE8 though
而不是
setTimeout(test.stop, 10000);
原因是当您将回调传递给函数时,Javascript会失去对“this”的跟踪。