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对象一些修改、设置对象属性的方法会有布尔类型返回值,可以判断操作是否成功。
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律