在对象中使用定时器的时候,我们会碰到这样一个问题:定时器的函数无法访问对象的属性,问题的原因是:
定时器访问的是全局属性,如下代码片段,定时器中this指的是window对象,没有在全局中定义变量是age的这么一个变量,所以这里打印undefined!
<script type="text/javascript">
function TestObj(){
this.age=10;
this.show=function(){
setTimeout(function(){
alert(this.age);
},2000);
};
}
var testObj=new TestObj;
testObj.show();
</script>
面对这种情况我想了一个比较笨拙的办法:如下代码块,可以创建一个全局变量,用定时器之前把当前对象赋值给这个全局变量,然后在定时器内直接用该变量访问对象的属性。
var cacheTestObj=null;
function TestObj(){
this.age=10;
cacheTestObj=this;
this.show=function(){
setTimeout(function(){
alert(cacheTestObj.age);
cacheTestObj.destory();
},2000);
};
this.destory=function(){
cacheTestObj=null;
};
}
var testObj=new TestObj;
testObj.show();