Proxy-Reflect(代理与反射) —响应式原理

代理对象Proxy是用 构造函数Proxy创建出来的。Proxy 让我们能够以简洁易懂的方式控制外部对对象的访问

接受俩个参数:目标对象(target)、处理程序对象(handler)。

var p = new Proxy(target, handler);

处理程序对象中可以定义捕获器,可以捕获13种不同的操作,用来进行基本操作的拦截。

当外界每次对代理对象进行操作时,就会执行处理程序对象(handler)上的一些方法,从而拦截并修改相应的行为。handler 能代理的一些常用的方法如下:

const obj = {
  name: "小二上酒", 
  age: 23
}


const objProxy = new Proxy(obj, {
  // 获取值时的捕获器
  get: function(target, key) {
    console.log(`监听到对象的${key}属性被访问了`, target)
    return target[key]
  },

  // 设置值时的捕获器
  set: function(target, key, newValue) {
    console.log(`监听到对象的${key}属性被设置值`, target)
    target[key] = newValue
  },

  // 监听in的捕获器
  has: function(target, key) {
    console.log(`监听到对象的${key}属性in操作`, target)
    return key in target
  },

  // 监听delete的捕获器
  deleteProperty: function(target, key) {
    console.log(`监听到对象的${key}属性in操作`, target)
    delete target[key]
  }
})

Reflect也是ES6新增的一个API,它是一个对象,它主要提供了很多操作JavaScript对象的方法,有点像Object中操作对象的方法;

Reflect对象的方法和Proxy中捕获的基本操作是一一对应的,也是13个,同时 ,如果代理中都手动实现捕获器中操作过于麻烦,根据这个特点可以通过调用Reflect对象的同名方法来轻松搞定r

通过调用Reflect对象来捕获还有一个好处,Reflect对象一些修改、设置对象属性的方法会有布尔类型返回值,可以判断操作是否成功。

 

posted on 2022-10-11 19:53  小二上酒~  阅读(69)  评论(0编辑  收藏  举报