Javascript 为什么我的方法会打印;秒:南“;

Javascript 为什么我的方法会打印;秒:南“;,javascript,prototype,Javascript,Prototype,调试时钟类的increment和tick方法时遇到问题。时钟的seconds属性应该每秒递增1,但是seconds会抛出一个NaN错误 增量的目标是每次调用时钟实例时,将其秒数增加1。Tick每秒调用一次increment方法以实现这一点 function Clock() { this.seconds = 0; } Clock.prototype.increment = function() { this.seconds = this.seconds + 1; console.lo

调试时钟类的increment和tick方法时遇到问题。时钟的seconds属性应该每秒递增1,但是seconds会抛出一个NaN错误

增量的目标是每次调用时钟实例时,将其秒数增加1。Tick每秒调用一次increment方法以实现这一点

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();

这是使用setTimeout调用它时的窗口

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

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

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

另请参见:

请不要回答重复的问题。投票决定作为一个副本关闭。@MikeMcCaughan投票决定关闭,但是OP更容易找到一个解决方案……他们可以从副本中得到这个解决方案。或者,就此而言,一个简单的评论。通过回答问题,可以减少删除问题的可能性。