Vue:数据代理

一、MVVM模型

在MVVM模型中:

  • M:Model模型,指data中的数据
  • V: View视图,指模板代码
  • VM:ViewModel视图模型,指Vue实例

        MVVM采用双向数据绑定,view中数据变化将自动反映到viewmodel上,反之,model中数据变化也将会自动展示在页面上把Model和View关联起来的就是ViewModel。ViewModel负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model。

MVVM核心思想,是关注model的变化,让MVVM框架利用自己的机制自动更新DOM,也就是所谓的数据-视图分离,数据不会影响视图。

二、Object.defineProprty

        VUE的底层使用了Object.defineProprty,Object.defineProperty()方法会直接在一个对象上定义一个新属性

    <script>
        let number = 18;
        let person = {
            name:"wangy",
            sex:"男"
        }

        // 使用 Object.defineProperties()方法为对象添加一个新属性。
        Object.defineProperty(person,'age',{
            // value:18,   // 属性值
            // enumerable:true,    // 控制属性是否可以枚举,默认为false
            // writable:true,      // 控制属性是否可以被修改,默认为false
            // configurable:true,  // 控制属性是否可以被删除,默认值为false 

            // 数据代理
            // 当有人读取person的age属性的时候,get函数(getter)会被调用,其返回的值就是age的值
            get(){
                console.log('读取age属性');
                return number;
            },

            // 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
            set(value){
                console.log('修改age属性,且值为',value);
                number = value;
            }
        })
    </script>

三、数据代理

        数据代理是通过一个对象代理另外一个对象中属性的操作(读/写),如下所示:

    <script>
        let obj1={
            x:100
        }

        let obj2={
            y:200
        }

        Object.defineProperty(obj2,'x',{
            get(){
                return obj1.x;
            },
            set(value){
                obj1.x = value;
            }
        })
    </script>

        VUE中使用数据代理,通过vm对象来代理data对象中属性的操作(读/写),这样更加方便操作data中的数据

VUE代理data对象属性的基本原理如下

  • 通过Object.defineProperty()将data对象中所有属性添加到vm上
  • 为每一个添加到vm上的属性,都指定一个gettersetter
  • 在getter和setter方法内部去操作(读/写)data中对应的属性

        如下图所示。在Vue中,其会将我们写的data传给其自身属性_data,然后将_data中的属性(也即我们写在data中的属性)通过Object.defineProprty添加到vm中,并通过get和set方法实现与data对象中相应属性的数据代理

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值