zhangdizhangdi

代理模式 ⭐

定义

代理模式(Proxy Pattern),为一个对象提供一个“替身”,由代理对象控制对原对象的访问,可以改变原始对象行为。

  • 经纪人(代理明星)
  • 网关(代理服务器)
  • 中介(代理房东)

实现

js
// ES6的Proxy
let Person = {
  name: 'Zhang San',
  age: 18,
  rate: '',
}

let ProxyPerson = new Proxy(Person, {
  get(target, key) {
    if (key != 'age') {
      return Reflect.get(target, key)
    } else {
      return '保密'
    }
  },
  set(target, key, value) {
    if (key === 'rate') {
      return Reflect.set(target, key, value === 'A' ? '推荐' : '待提高')
    }
    return Reflect.set(target, key, value)
  },
})

console.log(ProxyPerson.name) // 'Zhang San'
console.log(ProxyPerson.age) // '保密'
ProxyPerson.age = '30'
console.log(ProxyPerson.age) // '保密'
console.log(Person.age) // '30'
ProxyPerson.rate = 'B'
console.log(ProxyPerson.rate) // '待提高'
执行结果
Zhang San
保密
保密
30
待提高

应用场景

  • Vue3 数据响应
  • 表单验证
  • DOM 事件代理