终于知道某些大神在写js插件的时候为什么第一句都是"var that=this",来看看下面的这个例子,大家都会懂啦:
<script type="text/javascript"> var obj = { x : 100, y : function(){ setTimeout( function(){ alert(this.x); } //这里的this指向的是window对象,并不是我们期待的obj,所以会弹出undefined , 2000); } }; obj.y(); </script>
我们都知道,不用var修饰的变量就是会被js引擎默认为window的属性,那么函数也是一样的道理,不用function修饰的函数也会被认为是window的方法,所以这里上述代码输出的就是undefined;
那么再看看下面这段代码:
<script type="text/javascript"> var obj = { x : 100, y : function(){ var that = this; setTimeout( function(){ alert(that.x); } , 2000); } }; obj.y(); //弹出100 </script>
这里就达到了预想的效果了.原因就是,在调用setTimeout函数之前,我们已经在setTimeout这个作用域链之前将this赋值给that,那么此时的that在obj这个作用域链对象中,自然..that.x打印的就是它自己的属性值100啦