解釋this指針指向與bind()方法:用bind方法永久綁定this的指向

參考資料:

MDN,函數的 this 關鍵字

MDN,bind() 方法

MDN,箭頭函數

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

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章