前言
[實踐系列] 主要是讓我們通過實踐去加深對一些原理的理解。
有興趣的同學可以關注 我的部落格 ,之後不斷會有乾貨更新哦。 求star求follow~
已經掌握該知識點的同學可以直接略過~
三兄弟的作用.
apply.call.bind 都是為了改變函式執行時上下文(this指向)而存在的。
三兄弟的區別.
- 三兄弟接收的第一個引數都是 要繫結的this指向.
- apply的第二個引數是一個引數陣列,call和bind的第二個及之後的引數作為函式實參按順序傳入。
- bind不會立即呼叫,其他兩個會立即呼叫。
接下來,我們來對三兄弟進行模擬實現
call的簡易模擬實現(es6)
思路
- 函式定義在哪裡 ?
call是可以被所有方法呼叫的,所以毫無疑問的定義在 Function的原型上!
- 函式接收引數 ?
繫結函式被呼叫時只傳入第二個引數及之後的引數
- 如何顯式繫結this ?
如果呼叫者函式,被某一個物件所擁有,那麼該函式在呼叫時,內部的this指向該物件。
ojbk..理清了思路.開擼
apply的簡易模擬實現(es6)
apply實現的思路與call基本相同,我們只需要對引數進行不同處理即可
bind的簡易模擬實現(es6)
這裡只是做簡易實現,不考慮new操作符的情況,之後會寫個文章對這個知識點進行詳解~
思路
- 函式定義在哪裡 ?
bind是可以被所有方法呼叫的,所以毫無疑問的定義在 Function的原型上!
- 函式接收引數 ?
bind函式返回一個繫結函式,最終呼叫需要傳入函式實參和繫結函式的實參!!
- 如何顯式繫結this ?
如果呼叫者函式,被某一個物件所擁有,那麼該函式在呼叫時,內部的this指向該物件。
End
如果有幫助到你,請給我一個star,就算是對我的感謝啦~