停止由setTimeout延迟的Javascript setInterval

时间:2013-11-20 13:16:39

标签: javascript

我遇到了这个jsfiddle代码段的问题:

http://jsfiddle.net/y45jN/7/

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。

1 个答案:

答案 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”的跟踪。