对this关键字的一些理解

<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。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值