随笔 - 20  文章 - 0  评论 - 1  阅读 - 10355

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   小二上酒~  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示