js的this指向

茂飛發表於2020-11-16

1. 普通函式的this

  1. 如果一個函式中有this,但是它沒有被上一級的物件所呼叫,那麼this指向的就是window
  2. 如果一個函式中有this,這個函式有被上一級的物件所呼叫,那麼this指向的就是上一級的物件
  3. 如果一個函式中有this,這個函式中包含多個物件,儘管這個函式是被最外層的物件所呼叫,this指向的也只是它上一級的物件
    function a() {
        var user = "zmf";
        console.log(this.user) //undifine
        console.log(this) //window
    };
    window.a();

var o = {
    a:10,
    b: {
        a:12,
        fn : function () {
            console.log(this.user)
            console.log(this)
        }
    }
}
//雖然函式fn是被物件b所引用,但是在將fn賦值給變數j的時候並沒有執行所以最終指向的是window
//this永遠指向的是最後呼叫它的物件,也就是看它執行的時候是誰呼叫的
var j = o.b.fn;
j();

2. 建構函式的this

//這裡之所以物件a可以點出函式Fn裡面的user是因為new關鍵字可以改變this的指向,將這個this指向物件a,
//為什麼我說a是物件,因為用了new關鍵字就是建立一個物件例項
        function Fn(){
            this.user = "zmf";
        }
        var a = new Fn();
        console.log(a.user);

3. 有返回值的this

如果返回值是一個物件,那麼this指向的就是那個返回的物件,如果返回值不是一個物件那麼this還是指向函式的例項

相關文章