OOP样式JS不能使用setInterval函数

时间:2016-09-01 13:53:26

标签: javascript oop

从我从其他帖子收集到的内容看起来似乎不可能,但为什么我不能像这样调用setInterval函数(略短的手)?

tick: function() {
     var self = this;
     setInterval(this.calculateTime, 1000);
 }

我需要使用以下内容。

  tick: function() {
    var self = this;
    setInterval(function(){this.calculateTime()}, 1000);
  }

任何人都能解释为什么会出现这种情况并让我放心吗?

请参阅以下完整代码

var countdownTimer = {

  init: function(end) {
    this.endTime = new Date(end);
  },

  calculateTime: function(){
    this.now = new Date();
    this.difference = this.endTime - this.now;
    this.seconds = Math.floor(this.difference / 1000);
    this.minutes = Math.floor(this.seconds / 60);
    this.hours = Math.floor(this.minutes / 60);
    this.days = Math.floor(this.hours / 24);
    this.hours %= 24;
    this.minutes %= 60;
    this.seconds %= 60;
  },

  tick: function() {
    var self = this;
    setInterval(function(){this.calculateTime()}, 1000);
  }
}

countdownTimer.init('02/09/2016');
countdownTimer.calculateTime();
countdownTimer.tick();

1 个答案:

答案 0 :(得分:0)

您可以将bind用于您的目的:

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