理解this
- JavaScript是詞法作用域(或者說是靜態作用域):作用域在函式定義的時候就有了
- this 是Javascript用來實現動態作用的一種方法,this的指向在函式執行的時候才會確定,誰呼叫了這個函式this就指向誰。
四種常用的this 指向
- 直接呼叫this--指向window。
- 物件方法呼叫
bar.foo()
--指向呼叫該函式的物件,也就是bar。 - 用call和apply繫結:
foo.call(bar)
,foo.apply(bar)
, (二者的區別主要在傳參上)。--指向繫結的物件。
這種情況下,繫結可以丟失,也就是可以重新繫結到其他物件。
- 使用bind(),可以解決繫結丟失的問題,也就是說該函式不能重新繫結到其他物件。
一些例子
- 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 複製程式碼
- jQuery使用中: this指向的是DOM物件還是jQuery物件,注意
${this}
的使用