涉及面試題
考慮兩點:
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 ...