Proxy

9 阅读1分钟
  • Proxy:JS 的“代理对象”能力,可以拦截几乎所有对对象的操作(读、写、in、delete、遍历、Reflect.ownKeys 等)。Vue3 用它做响应式。
1.拦截范围

Proxy:拦截整个对象的操作(包括新增/删除属性、数组索引、长度变化等)

2.新增/删除属性

Proxy(Vue3):obj.newKey = 1、delete obj.key 都能被拦截到,天然支持

3.数组响应式

Proxy(Vue3):对数组索引、length 等操作也能拦截,行为更统一

4.性能与实现复杂度

Proxy:按需代理,整体实现更简单,通常也更快(尤其在深层对象/频繁新增字段时)

5.兼容性

Proxy:不支持 IE(Vue3 官方不支持 IE)

小案例:新增属性这一点最直观:

// Proxy 可以拦截新增/删除
const p = new Proxy({}, {
  set(target, key, value) {
    console.log('set', key, value)
    target[key] = value
    return true
  },
  deleteProperty(target, key) {
    console.log('delete', key)
    delete target[key]
    return true
  }
})
p.a = 1       // 会被拦截
delete p.a    // 会被拦截