为什么我的方法打印"秒:NAN"

时间:2017-02-15 21:45:36

标签: javascript prototype

我无法调试Clock类的增量和tick方法。时钟的秒属性应该每秒递增1,但是秒会引发NaN错误。

增量的目标是每次调用Clock实例上的秒数增加1。 Tick每秒调用一次增量方法,以实现这一目标。

function Clock() {
  this.seconds = 0;
}

Clock.prototype.increment = function() {
  this.seconds = this.seconds + 1;
  console.log('Seconds: ' + this.seconds);
};

Clock.prototype.tick = function() {
  setInterval(this.increment, 1000);
};

var timex = new Clock();

timex.tick();

2 个答案:

答案 0 :(得分:0)

使用setTimeout调用它时,

this是窗口。

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

答案 1 :(得分:0)

问题是,在setInterval处理程序中,this不再指向您的Clock对象,而是指向全局命名空间。最简单的解决方案就是将this绑定到this.increment

Clock.prototype.tick = function() {
  setInterval(this.increment.bind(this), 1000);
};

另请参阅:Javascript setInterval and `this` solution