vue里面的 Object.defineProperty 和 Proxy使用优势

文章探讨了Object.defineProperty和Proxy在处理对象属性时的get和set方法。使用Object.defineProperty为对象属性添加get和set时,数组内部的属性不受影响。而Proxy虽然同样不直接作用于数组元素,但可以通过一次递归实现对深层数据的拦截。文章提到了性能问题,递归遍历大量属性可能消耗性能,而Proxy在处理复杂结构时更高效。
摘要由CSDN通过智能技术生成

首先看 Object.defineProperty

   let m = {
            a: 1,
            b: 2,
            arr: [1, 2, 3]
        }
        let o = {}
        Object.keys(m).forEach((x) => {
            Object.defineProperty(o, x, {
                get() {
                    return m[x]
                },
                set() {
                    return m[x]

                }
            })
        })
        console.log('22', o);

下图打印的结果

a, arr, b 都是有get 和 set方法的,但是数组里面的属性是没有 set 和 get方法的
也就是修改了数组里面的数据,不会 触发set 和 get 方法的

利用递归也是可以修改数据里面的数据,来 触发set 和 get 方法的

之前的作者大大为什么不这样做呢,有 for 循环 需要遍历递归,但是如果对象的属性很多的话,这样的遍历递归是很消耗性能的

在这里插入图片描述

new Proxy

        let m = {
            a: 1,
            b: 2,
            arr: [1, 2, 3]
        }
        let o = new Proxy(m, {
            get(target, key) {
                return target[key];
            },
            set() {

            }
        })
        console.log('oo', o);

Proxy 它也是修改了数组里面的数据,不会 触发set 和 get 方法的
但是它只要递归一次就可以实现我们想要的了。

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值