标签类目:prototype setTimeout

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))’这样一行代码。
继续阅读 »

返回顶部