setInterval中两个地方的this指向不同的问题,实际上就是要明白setInterval(this.fn,1000);和setInterval(function(){this.fn},1000);这两个地方的this指向不同。
var x="window的x";
function Fun(x){
this.x=x;
}
Fun.prototype.showThis=function(){
console.log(this.x);
};
// eg1:
Fun.prototype.testThis1=function(){
setInterval(this.showThis,1000); //这行的this指向当前实例对象fun
};
// eg2:
Fun.prototype.testThis2=function(){
setInterval(function(){
console.log(this);//这里的this指向window
this.showThis();//报错Uncaught TypeError: this.showThis is not a function
},1000);
};
var fun=new Fun(6);
调用fun.testThis1();显示window的x。
setInterval(this.showThis,1000);这行代码相当于
setInterval(function(){
console.log(this.x);//这里的this指向window,this.x实际是window.x,显示window的x
},1000)
调用fun.testThis2();显示当前对象是window,并报错,因为window中没有showThis()这个方法
更多关于this指向问题:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html