vue2与vue3监测机制

vue2监测机制是通过object.defineProperty来进行的,然后劫持属性的get与set,他只能监听原有的属性,对于新增的属性无法监听,要使用vm.$set(对象/数组,属性名/索引,值)来设置

// // vue2响应式
        let obj = {}
        Object.defineProperty(obj, "prototypeName", {
            get: function (val) {
                console.log("调用了get");
            },
            set: function (newVal, oldVal) {
                console.log("调用了set,新值为:" + newVal);
            }
        })
        obj.prototypeName //调用get
        obj.prototypeName = "666" //调用set

vue3使用的是porxy代理整个对象不管对象新增什么属性都可以监测到,不会有vue2新增属性无法监测到的情况

 // let obj = {}
        let reactives = (obj) => {
            let o = new Proxy(obj, {
                // target原对象 key当前的key value要修改的值
                get(target, key, receiver) {
                    console.log("get-target", target);
                    console.log("get-key", key);
                    console.log("get-receiver", receiver);
                },
                set(target, key, value, receiver) {
                    target[key] = value
                    console.log("set-target", target);
                    console.log("set-key", key);
                    console.log("set-value", value);
                    console.log("set-receiver", receiver);
                },
                deleteProperty(target, key) {
                    console.log("delete-target", target);
                    console.log("delete-key", key);
                }
            })
            return o
        }
        let state = reactives({
            name: "张三"
        })
        state.name
        state.name = "李四"

以上只是个人手敲后的理解,希望带佬能指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值