对象中的javascript间隔

时间:2015-09-08 07:20:05

标签: javascript object intervals

我写了一个片段,它应该从1到1000或预定义的数字开始计数。

由于需要脚本多次,我认为将它作为一个对象编写并使用它多次是一个好主意。但我得到一个错误:

未捕获的ReferenceError:未定义root   (匿名函数)

我错了什么?

     var time = function() {
        var root = this;
        var i=0;
        root.max = 1000;
        root.elm = false;
        root.runTime = function() {
            if(root.elm != false) {
                if (i < root.max) {
                    i++;
                    root.elm.text(i);
                } else {
                    clearInterval(root.interval);
                }
            }
            this.interval = setInterval('root.runtTime()', 5);
        };
    };

    if($(document).ready(function() {
        var countUp= new time();
        countUp.max = 1526;
        countUp.elm = $("#elm");
        countUp.runTime();
    });

1 个答案:

答案 0 :(得分:6)

这是因为以下一行:

this.interval = setInterval('root.runtTime()', 5);

因为它是一个字符串has to be evaluated as a global object

更改为以下内容以确保相同的范围:

this.interval = setInterval(root.runtTime, 5);

此外还有一个拼写错误(runtTime应为runTime),因此请更改为以下内容:

this.interval = setInterval(root.runTime, 5);

最后,您使用setInterval,每5ms重复调用一次root.runTime。如果您希望递归调用,请更改为setTimeout

this.interval = setTimeout(root.runTime, 5);

或者设置runTime功能之外的时间间隔:

   root.runTime = function() {
        if(root.elm != false) {
            if (i < root.max) {
                i++;
                root.elm.text(i);
            } else {
                clearInterval(root.interval);
            }
        }
    };
    this.interval = setInterval(root.runTime, 5); 

此外,您不需要if周围的document.ready声明。这是一个回调函数,在DOM加载时触发,因此不需要if语句。

$(document).ready(function() {
    var countUp= new time();
    countUp.max = 1526;
    countUp.elm = $("#elm");
    countUp.runTime();
});