setTimeou中this指针问题
setTimeout()方法是一个能让其中第一个参数按照第二个参数指定的时间调用的,也就是说setTimeout方法能把开发者给予的时间值按照计划调用第一个参数。setTimeout方法也是window对象的一个预定义方法,它只能被window这个对象来调用。
var a=123 window.setTimeout(alert(this.a),1000)
给window对象添加一个属性a,1秒后显示123,其中this的确是指向window对象,在javascript中函数中的this永远指向调用这个函数的对象。当javascript自定义对象或者说是类的时候情况就有所不同了,下面的代码使用 setTimeout方法递归一个函数:
function classA(a,b){ this.A=a; this.B=b; } classA.prototype={ classB:function(){ alert(this.A) window.setTimeout(this.classB,this.B) } } var a=new classA('aaa',1000) ; a.classB();
代码看起来好像没什么问题setTimeout方法的参数传递this.classB这个对象的一个方法,对象初始化的时候显示正确,但是过了一秒后,第二个提示框显示的却是undefined,在这里setTimeout的第一个参数this.classB指向了一个函数,setTimeout方法将this.classB指向的这个函数原原本本的复制了一份之后传递进去。修改一下代码加入‘alert(‘this==window ‘+(this==window))’这样一行代码。
继续阅读 »