代码之家  ›  专栏  ›  技术社区  ›  keparo

javascript:如何验证计时器属性?

  •  0
  • keparo  · 技术社区  · 15 年前

    如果我有以下代码:

    var myfunc = function() { alert('wow'); };
    var t=setTimeout(myfunc, 300);
    

    我能用存储在里面的身份证做些什么吗 t 验证计时器的持续时间和回调?我试图直接验证计时器的属性,这样在单元测试超时之前就不必实际运行它了。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jerod Venema    15 年前

    不,做不到。

    相反,你可以做的是以不同的方式跟踪它们,如下所示:

    var timeouts = [{
      fn: myfunc,
      timeout: 300
    }];
    
    for(var i = 0; i < timeouts.length; i++){
      timeouts[i].id = window.setTimeout(timeouts[i].fn, timeouts[i].timeout);
    }
    
        2
  •  0
  •   casablanca    15 年前

    返回的ID是浏览器内部的,因此您不能对它做太多的操作。但是,既然您知道启动计时器时的持续时间和回调,那么您也可以将整个事件包装在 Timer 全力以赴的课程:

    function Timer(callback, timeout) {
      this.callback = callback;
      this.timeout = timeout;
      this.id = window.setTimeout(callback, timeout);
    }
    
    Timer.prototype.cancel = function() {
      window.clearTimeout(this.id);
    }
    
    Timer.prototype.fire = function() {
      this.cancel();
      this.callback();
    }
    

    然后您只需创建计时器并访问它们的属性,如下所示:

    t = new Timer(myfunc, 300);
    alert(t.timeout);