setInterval和setTimeout中如果出现this,那么这个this指向的是window对象,解决方法呢。目前我也只知道三种。
1.在外部函数中将this存为一个变量,回调函数总直接使用该变量,而不是this,代码如下:
var name = 'my name is window';
var obj = {
name: 'my name is obj',
fn: function () {
var that = this;
var timer = null;
clearInterval(timer);
timer = setInterval(function () {
console.log(that.name); //my name is obj
}, 1000)
}
}
2.使用bind()方法,bind方法众所周知是用来事件绑定的,那他现在用在这里,是es5中的方法,如果低版本IE下有兼容问题,可以用es5-shim.js解决。bind和call、apply类似,但是之所以不用call和apply,是因为他们是立即调用函数,不是返回函数,代码如下:
var name = 'my name is window';
var obj = {
name: 'my name is obj',
fn: function () {
var timer = null;
clearInterval(timer);
timer = setInterval(function () {
console.log(this.name); //my name is obj
}.bind(this), 1000)
}
}
3.使用ES6语法的箭头函数,代码如下:
var name = 'my name is window';
var obj = {
name: 'my name is obj',
fn: function () {
var timer = null;
clearInterval(timer);
timer = setInterval(() => {
console.log(this.name); //my name is obj
}, 1000)
}
}
希望可以有所用处,我每天都会写下我所遇到的新知识,进步与你同在。fighting baby!!!!!