关于this指针的指向

341 阅读1分钟

首先必须要说的是,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有了东西。