关于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有了东西。
 

猜你喜欢

转载自blog.csdn.net/qq_40421277/article/details/81194769