JavaScript 中 This 的指向

貓董發表於2018-11-06

理解this

  • JavaScript是詞法作用域(或者說是靜態作用域):作用域在函式定義的時候就有了
  • this 是Javascript用來實現動態作用的一種方法,this的指向在函式執行的時候才會確定,誰呼叫了這個函式this就指向誰。

四種常用的this 指向

  1. 直接呼叫this--指向window。
  2. 物件方法呼叫bar.foo()--指向呼叫該函式的物件,也就是bar。
  3. 用call和apply繫結:foo.call(bar), foo.apply(bar), (二者的區別主要在傳參上)。--指向繫結的物件。

這種情況下,繫結可以丟失,也就是可以重新繫結到其他物件。

  1. 使用bind(),可以解決繫結丟失的問題,也就是說該函式不能重新繫結到其他物件。

一些例子

  1. setTimeout: 要注意函式執行的時候才將this繫結到呼叫函式的物件。如果回撥函式是物件的方法,那麼setTimeout使得方法內部的this關鍵字指向全域性環境,而不是定義時所在的那個物件。如下,可以將obj.y放入一個匿名函式解決,也可以使用bind
    var x = 1;
    var obj = {
     x: 2,
     y: function () {
    console.log(this.x);
      }
    };
    
    setTimeout(function () {
     obj.y();
    }, 1000);
    // 2
    複製程式碼
  2. jQuery使用中: this指向的是DOM物件還是jQuery物件,注意${this}的使用

相關文章