学习VUE3总得晓得Proxy怎么应用吧

咱们都晓得vue2是应用object.defineProxy实现数据监控的,但在vue3中改成了应用JS新增的Proxy对象。明天就来看一下Proxy 是如何应用的

Proxy对象用于创立一个对象的代理,进而实现基本操作的拦挡和定义。

它的根本语法是

const p = new Proxy(target, handler)

target是应用Proxy包裹的指标对象

handler是一个通常以函数作为属性的对象,其中各属性定义了执行各种操作时的代理行为,它能够有一些配置

const obj = {    name: '伯约同学',    age: 18}const objProxy = new Proxy(obj, {    // 获取值时的捕捉器    get(target, key) {        console.log(`监听到对象的${key}属性被拜访了`, target)        return target[key]    },    // 设置值时的捕捉器    set(target, key, newValue) {        console.log(`监听到对象的${key}属性被设置了`, target)        target[key] = newValue    },    // 监听 in 捕捉器    has(target, key) {        console.log(`监听到对象的in操作符`, target)        return key in target    },         // 监听 delete 捕捉器    deleteProperty(target, key) {        console.log(`监听到对象的delete操作符`, target)        delete target[key]    },         // 获取对象原型捕捉器    getPrototypeOf(target) { xxx },         // 设置对象原型捕捉器    setPrototypeOf(target, prototype) { xxx },         // 是否能够扩大捕捉器    isExtensible() { xxx },         // 阻止扩大捕捉器    preventExtensions() { xxx },         // 获取本人的属性描述符捕捉器    getOwnPropertyDescriptor() { xxx },         // 定义属性捕捉器    defineProperty() { xxx },         // 监听属性名和 symbol捕捉器    ownKeys() { xxx },         // 函数调用操作的捕捉器,用于函数对象    apply() { xxx },         // new 操作符捕捉器,用于函数对象    construct() { xxx }})

在vue3中用到的就是get和set办法。应用proxy代理相当于在对象外围做了一层拦挡,不必像vue2时针对每个属性再专门做一下遍历去监听属性。对于数组对象的属性变动也好起来了,不用再专门写办法去解决。