javascript攔截instanceof
數據抓取進行問題分析很重的一個方法就是攔截(hook),一般的函數屬性攔截通過Proxy即可。而對於instanceof則需要使用Symbol.hasInstance。
當一個對象定義Symbol.hasInstance的屬性描述符後,就可以攔截到instanceof調用。
Object.defineProperty(Navigator, Symbol.hasInstance, {
value: function(instance) {
debugger;
return true;
}});
console.log(navigator instanceof Navigator);
而對於class增加Symbol.hasInstance方法即可
class MyArray {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance)
}
}
console.log([] instanceof MyArray);
原文
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance