參考資料:
this指針的特點:
①在絕大多數情況下,函數的調用方式決定了this
的值。
②this不能在執行期間被賦值,並且在每次函數被調用時this
的值也可能會不同。
③ES5引入了bind方法來設置函數的this
值,而不用考慮函數如何被調用的。
④ES2015 引入了支持this
詞法解析的箭頭函數(它在閉合的執行環境內設置this
的值)。
本篇博客重點講③,即用bind方法永久綁定this的指向。
MDN文檔中講解this與bind方法中寫道:
“ECMAScript 5 引入了 Function.prototype.bind
。調用f.bind(someObject)
會創建一個與f
具有相同函數體和作用域的函數,但是在這個新函數中,this
將永久地被綁定到了bind
的第一個參數,無論這個函數是如何被調用的。”
意思是:bind方法就是新創建一個與函數f具有相同函數體和作用域的函數,然後把新函數的this永久綁定爲bind
的第一個參數,無論新函數如何被調用的,新函數的this指向已永久綁定。
function f(){
return this.a;
}
var g = f.bind({a:"azerty"});
console.log(g()); // azerty
var h = g.bind({a:'yoo'}); // bind只生效一次!
console.log(h()); // azerty
var o = {a:37, f:f, g:g, h:h};
console.log(o.f(), o.g(), o.h()); // 37, azerty, azerty