JS定时器方法中this的指向问题

JS定时器方法中this的指向问题

在将面向过程的聊天室代码过渡为面向对象时,遇到了下面这个错误:
JS定时器方法中this的指向问题可是明明定义了ajax的函数,而且在别的函数里调用也没问题,却偏偏在animation函数里调用失败了。而且报错的信息也让人感觉无从下手,ajax不是一个函数,可是明明定义该函数了,而且在之前的函数中也调用成功了JS定时器方法中this的指向问题
先是查看ajax和animation两个自己定义的方法,都没有问题,然后顺着层层调用往上找,终于找到了罪魁祸首!就是setInterval
纠错前的setInterval:
JS定时器方法中this的指向问题
然后百度了setInterval的this指向问题:
在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,这是由于setTimeout或者setInterval调用的代码,是运行在与其所在函数完全分离的执行环境上。 这就会导致这些代码中包含的 this 关键字会指向 window (或全局)对象,但是在setTimeout或者setInterval中传入的不是函数时,this则指向当前对象
这样一来,报错this.ajax is not a function就不足为奇了,因为这时候的this指向的是window,可是window怎么会有自定义的函数方法呢?
问题找到了,那么应该怎么解决呢?
只需要bind方法就能够解决。当被绑定函数执行时,bind方法会创建一个新函数,并将第一个参数作为新函数运行时的this
纠错后的setInterval:JS定时器方法中this的指向问题
最终问题得以解决