Vue 数据双向绑定原理

本文介绍了数据劫持的概念,通过`Object.defineProperty`深入理解如何监听数据对象的属性变化。文章展示了如何使用`observe`函数遍历并定义响应式属性,以及`defineReactive`函数来设置数据的getter和setter,实现数据变化时的监听。同时,提到了订阅者模式,当数据变化时,所有依赖该数据的页面元素都能得到更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据劫持:   就是通过 Object.defineProperty 去操作 数据的get和set

实现一个数据监听器Observer,能够对数据对象的所有属性进行监听

 监听的就是这个data

订阅者模式:一对多,data的一个数据变化,   页面上用到这个数据的地方 都更新

var data ={name: "zs"}

observe(data)

function observe(data){
    if(!data || typeof data !== Object){

        return  ;
    }

    Object.keys(data).forEach(funtion(key){

       defineReactive(data,key,data[key])


    })
}

function defineReactive(data,key,val){

    observe(val) //监听子属性

    Object.defineProperty(data,key,{
        
        enumerable:true,//可枚举
        
        configurable:false,//不能再define
        
        get:function(){
            
            return val;
        
        },
        
        set:function(newVal){

            console.log('监听到值变化了',newVal)

            val = newVal;

         }
        
    })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值