一、什么是Proxy ?
- 1 . Proxy 這個詞的原理為代理,在這里可以表示由它來“代理”某些操作,譯為“代理器”。
- 2 . Proxy用於修改某些操作的默認行為,也可以理解為在目標對象之前架設一層攔截,外部所有的訪問都必須先通過這層攔截,因此提供了一種機制,可以對外部的訪問進行過濾和修改。
- 3 . proxy接受一個待代理目標對象和一些包含元操作的對象,為待代理目標創建一個‘屏障’,並攔截所有操作,重定向到自定義的元操作對象上。
二、Proxy的實際用法
const p = new Proxy(target,handler)
target
要包裝的目標對象Proxy。它可以是任何類型的對象,包括本機數組,函數甚至其他代理
handler
一個對象,其屬性是定義對代理p執行操作時的行為的函數

VUE3.0升級Proxy的應用????
在VUE2.X版本中,響應式布局一個最重要的API就是Object.defineProperty,用這個API用來做數據劫持。
但是 defineProperty 的缺陷有以下幾個:
- 1.無法原生監聽數組的變化,需要特殊處理
- 2.必須遍歷對象的每個屬性(當示例初始化的時,Object.definePropety是從data的根節點遍歷到末節點。一次性便利全部)
- 3.無法監聽屬性的新增刪除操作(VUE提供Vue.set Vue.delete API,原因就是因為Object.definePropety物件監聽新增刪除操作)
以下來驗證一下Proxy是否會有同樣的問題:
Proxy可以監聽數組

Proxy可以監聽屬性的新增刪除操作

深層遍歷嵌套的對象

