前言
在react開發中,經常使用bind(this),來將函式繫結上下文,後來使用了箭頭函式,就不需要使用bind(this)了。在非箭頭函式下, this 指向呼叫其所在函式的物件,而且是離誰近就是指向誰(此對於常規物件,原型鏈, getter & setter等都適用);建構函式下,this與被建立的新物件繫結;DOM事件,this指向觸發事件的元素;內聯事件分兩種情況,bind繫結, call & apply 方法等, 容以下一步一步討論。箭頭函式也會穿插其中進行討論。關於this指標的問題可以看下這裡。
bind 方法
bind方法在ES5引入, 在Function的原型鏈上, Function.prototype.bind 。通過bind方法繫結後, 函式將被永遠繫結在其第一個引數物件上, 而無論其在什麼情況下被呼叫。
1 function f(){ 2 return this.a; 3 } 4 5 var g = f.bind({a:"azerty"}); 6 console.log(g()); // azerty 7 8 var o = {a:37, f:f, g:g}; 9 console.log(o.f(), o.g()); // 37, azerty
箭頭函式中的 this
箭頭函式this指標是在定義的時候繫結的,不管在什麼上下文環境中,他的指向是其定義時的指向。而普通的函式this指標是在執行的時候進行繫結的,它的指向為當前上下文環境因此是不確定的。