手寫call,apply,bind函式

2021-09-11 06:16:05 字數 814 閱讀 9458

涉及面試題

考慮兩點:

function.prototype.mycall = function(context) 

//context=context||window 和上面的**一樣

context.fn = this

const args = [...arguments].slice(1)

const result = context.fn(...args)

delete context.fn

return result

}

實現分析

if (typeof this !== 'function')

context = context || window

context.fn = this

let result

if (arguments[1]) else

delete context.fn

return result

}因為bind轉換後的函式可以作為建構函式使用,此時this應該指向構造出的例項,而不是bind繫結的第乙個引數

function.prototype.mybind = function(context) 

//返回乙個繫結this的函式,這裡我們需要儲存this

const _this = this

const args = [...arguments].slice(1)

//返回乙個函式

return function f()

}}

手寫call apply bind詳解

個人部落格 歡迎交流 螢火之森 三者都是改變函式執行時的上下文,也就是就是改變this的指向。函式.call 第乙個引數 想讓函式中this指向誰,就傳誰進來,後面的引數 本身函式需要傳遞實參,需要幾個實參,就乙個乙個的傳遞即可 call的作用 1.呼叫函式 2.指定函式中this指向 函式.bin...

手寫call apply bind函式

function.prototype.mcall function context,args context context window global const funcname symbol context funcname this 傳入的引數不是陣列 if array.isarray ar...

手寫原始碼之 call,apply,bind

function.prototype.mycall function context,args let fnsymbol symbol context fnsymbol this let fn context fnsymbol args delete context fnsymbol return ...