学习VUE3总得知道Proxy怎么使用吧

举报
伯约同学 发表于 2022/02/25 23:33:17 2022/02/25
【摘要】 学习VUE3总得知道Proxy怎么使用吧我们都知道vue2是使用object.defineProxy实现数据监控的,但在vue3中改成了使用JS新增的Proxy对象。今天就来看一下Proxy 是如何使用的Proxy对象用于创建一个对象的代理,进而实现基本操作的拦截和定义。它的基本语法是const p = new Proxy(target, handler)target是使用Proxy包裹的目...

学习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时针对每个属性再专门做一下遍历去监听属性。对于数组对象的属性变化也好起来了,不必再专门写方法去处理。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。