Javascript 绑定使用调用和 setInterval

Javascript binding using call with setInterval

本文关键字:setInterval 调用 绑定 Javascript      更新时间:2023-09-26

如何使用"call"和"setInterval"来获取对象文字来调用它自己的方法之一?

下面是一个示例。这有效,我理解它为什么有效。计时器对象每秒调用自己的tick方法一次

var timer =
{ 
  start: function()
  {
    var self = this;
    setInterval(function(){self.tick();}, 1000);
  },
  tick: function()
  {
    console.log("tick!");
  }
};
timer.start();

我试图通过使用"call"来简化这段代码。下一个例子是我想出的最好的例子。但它不起作用:tick 方法只调用一次,然后我得到一个类型错误。

var timer =
{ 
  start: function()
  {
    setTimeout.call(this, this.tick(), 1000);
  },
  tick: function()
  {
    console.log("tick!");
  }
};
timer.start();

我想我真的不明白呼叫是如何工作的。谁能解释我做错了什么?

.calling .setInterval不是浏览器调用的回调函数:

setInterval( this.tick.bind(this), 1000 );

应该工作。见.bind

这就是我最终得到的:

  var timer = {
    time: 0,
    start: function() {
      var timerTick = this.tick.bind(this);
      window.setInterval(function() {
        timerTick();
      }, 1000);
    },
    tick: function() {
      this.time += 1;
      console.log(this.time);
    }
  };
  timer.start();