Vue.js---数据代理

数据代理是一种通过中间对象访问和操作另一对象属性的技术,常用于简化代码。在JavaScript中,可以使用Object.defineProperty()实现。Vue框架中,数据代理使得实例化对象与_data属性之间的交互变得便捷,当修改实例化对象的属性时,实际上是在改变data中的属性,进而触发视图更新。这种机制提高了编码效率并确保了数据变化的同步。
摘要由CSDN通过智能技术生成

数据代理:

        含义:通过一个对象访问、操作另一个对象中的属性。

        实现:可以通过Object.defineProperty()实现

let obj1 = { a: 100 };
let obj2 = { b: 200 };
Object.defineProperty(obj2, 'a', {
        get() {
            return obj1.a;
        },
        Set(value) {
            obj1.a = value;
        }
    })
    //第三个参数中可写的属性:
    //value--新绑定属性的属性值
    //writable--该新属性是否可以被重写
    //enumerable--该新属性是否可以被枚举,即是否可以通过for in遍历出来
    //configurable--该新属性是否可以被删除或修改特性(即上述参数是否可以被修改)

        当obj2.a被访问的时候自动调用get()方法,该方法的返回值即为obj2.a的值。

        当obj2.a被修改的时候自动调用set()方法,方法的参数为修改后的值,这里将其赋给obj1.a,相当于修改的时obj1.a的值。

Vue中的数据代理:

        我们知道,Vue的实例化对象中有一个属性_data,通过判断 构造Vue实例时传入的属性 data === _data 可知,两者相同。基本原理与上述例子大致一样,将data中的属性添加一份到Vue的实例化对象上,并且为这些属性都指定了get()、set()方法。每当这些属性被访问或修改时,则自动调用相应的方法,对data中的属性进行访问或修改。

        我们知道,对data中的属性进行改动时,页面中用到该属性的地方会重新渲染。而在通过Vue的实例化对象改变它自身的同名属性时,页面中相应的地方同样会重新渲染,也说明Vue在通过改变自身属性来改变data中的属性。

        这一点也可以通过Vue的开发者工具验证。

        此时是通过访问Vue实例化对象的属性来访问data中的属性,即符合我们数据代理的定义。

数据代理的优点: 

        方便编码,若不使用该数据代理,那么访问data中的属性就需要通过 _data.Property 来访问,有一点类似v-model双向绑定的感觉(雾)。

欢迎指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值