javascript攔截instanceof

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章