关于this指针的指向

  首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
  
this指针一般常用的有一下几种情况:
  情况一:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,而是underfined。

    function test(){
         var name = "John";
            console.log(this.name); //undefined
            console.log(this); //Window
    }
    test();   //实际上是window.test();

  情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

    var a = {
        name:"CC",
        b:{
            name:"John",
            fn:function(){
                console.log(this.name); //John
                console.log(this); //b
            }
        }
    }
        a.b.fn(); 
        //这里的上一级是b,也就是说给b调用了,所以这里的this指向b的作用域。

  情况3:将对象赋予给新创建的实例

    var a = {
        name:"CC",
        b:{
            name:"John",
            fn:function(){
                console.log(this.name); //undefined
                console.log(this); //window
            }
        }
    }
    var new = a.b.fn;   //将fn函数复给new
    new();    //window.new();和情况1一样

  情况4:构造函数,new实例

    function Fn(){
        this.name = "John";
    }
    var a = new Fn();
    console.log(a.name); //John

这里我们构造了实例a,这里的this指针指向了a的作用域,因为name的上一级调用对象是a。而实例a原本是没有东西的,空空如也。但是我们通过构造函数new给了a,也就是将Fn里的东西复制给了a,所以现在a有了东西。
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值