手寫原始碼之 call,apply,bind

2021-10-02 04:15:10 字數 823 閱讀 1823

function.prototype.mycall = function(context, ...args) 

let fnsymbol = symbol()

context[fnsymbol] = this

let fn = context[fnsymbol] (...args)

delete context[fnsymbol]

return fn

}

1,為傳入的context擴充套件乙個屬性,將原函式指向這個屬性2,將context之外的所有引數全部傳遞給這個新屬性,並將執行結果返回。// 判斷是否是undefined和null

if (typeof context === 'undefined' || context === null)

let fnsymbol = symbol()

context[fnsymbol] = this

let fn = context[fnsymbol] (...args)

return fn}

思路和call是一樣的只是傳參不同方式而已

手寫Vuex原始碼

vuex是基於vue的響應式原理基礎,所以無法拿出來單獨使用,必須在vue的基礎之上使用。main.js 1 import store form store 引入乙個store檔案2 3new vue store.js 1 import vuex from vuex 2 3vue.use vuex ...

手寫bind原始碼

三個方法的相同點 目標函式被呼叫時,改變this的指向的值 三個方法都是函式的方法,掛在在function.prototype上 不同點 目標函式呼叫bind後,不會立即執行,而是返回乙個新的函式,呼叫新函式才會執行目標函式 自定義乙個類似於bind函式的函式,將其掛載到函式function上面,然...

手寫 call apply 及 bind 函式

function.prototype.mycall function context context context window context.fn this 建立fn屬性,並將值設定為需要呼叫的函式 const args arguments slice 1 因為call可以傳入多個引數作為呼叫...