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是沒用的