用proxy 劫持函數(shù)

es6的proxy可以讓我們劫持一個(gè)函數(shù)調(diào)用
比如有個(gè)函數(shù)handleA

const handleA = ()=>{
  console.log("a")
}

此時(shí)我們通過proxy,攔截函數(shù)的調(diào)用行為

const handleAProxy = new Proxy(handleA, {
  apply(orignFn, self, args){
    console.log('劫持了A');
    return orignFn(...args)
  }
})
image.png

此時(shí)可能會(huì)有疑問,為什么是apply,劫持call有沒有同樣的效果呢
詳見: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Meta_programming

image.png

可以看到,劫持一個(gè)apply,相當(dāng)于劫持了4種調(diào)用方式,里面包含了直接調(diào)用,apply,call,所以這個(gè)proxy里的apply并不是我們認(rèn)知中的函數(shù)的apply,而是proxy自己定義的一個(gè)apply屬性名

而該文檔里可劫持的陷阱里也沒有包含“call”,所以定義call是沒用的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容