面試官:你能手寫實現call,apply,bind方法嗎?

前言

[實踐系列] 主要是讓咱們經過實踐去加深對一些原理的理解。前端

實踐系列-前端路由 git

實踐系列-Babel原理 es6

實踐系列-Promises/A+規範 github

實踐系列-瀏覽器緩存機制web

有興趣的同窗能夠關注 個人博客 ,以後不斷會有乾貨更新哦。 求star求follow~數組

三兄弟的做用.

apply.call.bind 都是爲了改變函數運行時上下文(this指向)而存在的。

image

三兄弟的區別.

  • 三兄弟接收的第一個參數都是 要綁定的this指向.
  • apply的第二個參數是一個參數數組,call和bind的第二個及以後的參數做爲函數實參按順序傳入。
  • bind不會當即調用,其餘兩個會當即調用。

image

接下來,咱們來對三兄弟進行模擬實現瀏覽器

call的簡易模擬實現(es6)

思路

  • 函數定義在哪裏 ?
call是能夠被全部方法調用的,因此毫無疑問的定義在 Function的原型上!
  • 函數接收參數 ?
綁定函數被調用時只傳入第二個參數及以後的參數
  • 如何顯式綁定this ?
若是調用者函數,被某一個對象所擁有,那麼該函數在調用時,內部的this指向該對象。

ojbk..理清了思路.開擼緩存

image

apply的簡易模擬實現(es6)

apply實現的思路與call基本相同,咱們只須要對參數進行不一樣處理便可app

image

bind的簡易模擬實現(es6)

這裏只是作簡易實現,不考慮new操做符的狀況,以後會寫個文章對這個知識點進行詳解~函數

思路

  • 函數定義在哪裏 ?
bind是能夠被全部方法調用的,因此毫無疑問的定義在 Function的原型上!
  • 函數接收參數 ?
bind函數返回一個綁定函數,最終調用須要傳入函數實參和綁定函數的實參!!
  • 如何顯式綁定this ?
若是調用者函數,被某一個對象所擁有,那麼該函數在調用時,內部的this指向該對象。

image

End

若是有幫助到你,請給我一個star,就算是對個人感謝啦~

相關文章
相關標籤/搜索