javascript - 设置间隔() : How to stop then start itself again?

标签 javascript oop scope setinterval

在 if 语句中,我希望间隔自行清除,然后再次调用其自身的对象函数来重新启动间隔。

这样的事可能吗?

我尝试过这种方式,但出现了意想不到的行为。我可以看到日志每 200 毫秒持续记录一次。虽然它应该已经停止,因为间隔已停止并重新启动,并且条件将不再评估为 true。

DateTime.prototype = {
    start: function () {
        var self = this;

        sendAjaxRequest(this.timeUrl, function () {
            var previousTime = new Date().getTime();

            this.tickIntervalId = setInterval(function tick() {
                var currentTime = new Date().getTime();

                if ((currentTime - previousTime) < 0) {
                    console.log('You changed your time backwards. Restarting.');

                    self.stop(); // <-- stopping itself
                    self.start(); // <-- call to same method its running from

                    return;
                }

                self.dateElement.innerHTML = new Date();

                previousTime = currentTime;

                return tick;
            }(), 200);
        });
    },

    stop: function () {
        clearInterval(this.tickIntervalId);

        this.tickIntervalId = null;
    }
}

最佳答案

我认为 setInterval 调用的范围是错误的。

尝试改变

this.tickIntervalId = setInterval(function tick() {

使用自己

self.tickIntervalId = setInterval(function tick() {

关于javascript - 设置间隔() : How to stop then start itself again?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323476/

相关文章:

javascript - jQuery 下拉菜单 CSS 操作

oop - 为什么使用类而不是函数?

python - 为什么 Python +=(加等于)运算符不修改内部函数中的变量?

javascript - Lawnchair javascript 数据 "get"不允许我分配给另一个变量

javascript - 将数组作为代码传递给 setTimeout 中的 eval?

javascript - 使用 JavaScript 将字符串中的相对链接图像替换为绝对路径图像

javascript - 这个 JS 函数如何在不调用数组的情况下从数组中提取项目?

php - 如何在php中创建对象数组

php - 在 OOP 中应该避免并尽可能多地使用在方法中传递参数吗?

javascript - 这段代码中的全局和局部范围有问题吗?