现在的位置: 首页 > 综合 > 正文

对this关键字的一些理解

2013年12月04日 ⁄ 综合 ⁄ 共 955字 ⁄ 字号 评论关闭

<script type="text/javascript">
var name="wangjun";
var ad={
    name:"adang",
    init:function(  ){
        alert(this==window);                // false

        alert(this==ad);                         // true
    var a=function(  ){
        alert(this==window);        // true
    }
    a(  );
    }
}
ad.init(  );

  </script>

第三个返回true,是在函数里头再定义函数。这个时候this的上下文会发生变化,不再是ad,而是window。

因为var a=function(  ) { alert(this==window);}相当于function a(  ) { alert(this==window);
},后者更像一个函数,而这个函数的调用是a( )也即window.a(),它并没有靠ad.init.a()来调用,所以它里头的this也不指向ad或者ad.init,而是window,因为a()也即window.a()。


=======================================================================================

<script type="text/javascript">
var name="wangjun";
function a(  ){
alert(this.name);
}
var ad={
name:"adang",
go:function(  ){
a(  );                                    改成a.call(ad);则结果是连续弹出两个“adang”
alert(this.name)
}
}
ad.go(  );
  </script>

结果是先弹出“wangjun”,后弹出“adang”

还是那个原理,ad对象里的go函数是ad来调用的,所以alert(this.name)的this指向ad,而go函数里的a函数并没有靠ad.go.a()的方式来调用,而是通过调用go函数间接调用a()函数,所以a()相当于window.a()所以这里的this指向window。


抱歉!评论已关闭.