代码之家  ›  专栏  ›  技术社区  ›  Keith Rousseau

对象内部的window.setInterval

  •  0
  • Keith Rousseau  · 技术社区  · 14 年前

    以下代码用于连续ping web服务以获取我的文件上载的状态:

    var FileUploader = function(uploadKey) {
        var intervalId;
    
        var UpdateProgress = function() {
            $.get('someWebService', {},
            function(json) {
                alert('success');
            });
        };
    
        return {
            BeginTrackProgress: function() {
                intervalId = window.setInterval('UpdateProgress()', 1500);
            },
    
            EndTrackProgress: function() {
                clearInterval(intervalId);
            }
        };
    };
    

    这就是它的名称:

    var fileUploader = new FileUploader('myFileKey');
    fileUploader.BeginTrackProgress();
    
    3 回复  |  直到 14 年前
        1
  •  8
  •   Sean Kinsey    14 年前

    用这个

     intervalId = window.setInterval(UpdateProgress, 1500);
    

    带有文字参数的setInterval将 eval 在全球范围内 UpdateProgress 无法访问。

        2
  •  2
  •   Community George Mulligan    7 年前

    因为这是一个 eval

    intervalId = window.setInterval(UpdateProgress, 1500)
    

    一般来说,最好避免 尽可能使用样式表达式。例如,如果您想从同一个计时器中调用多个函数,则可以使用匿名函数而不是字符串。

    window.setInterval(function () {
        function1();
        function2();
    }, 1500)
    

    另请参见

        3
  •  0
  •   Justin    14 年前

    +安迪的头(我还不能投票,doh!)

    另一个能让你得到的是如果你使用 this 在被调用函数中。

    var that = this;
    window.setInterval(function() {
        function1.apply(that);
        function2.apply(that);
    }, 1500);