VUE的数据代理

回顾_Object.defineProperty

新建文件【_Object.defineProperty.html.html】

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>_Object.defineProperty</title>
        <!-- 引入Vue -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    </head>
    <body>
        <!-- 准备好一个容器 -->
        <div id="root">
         
        </div>
        <!--阻止vue在启动时生成生产提示 -->
        <script type="text/javascript">
        Vue.config.productionTip=false
        let number=17
        let person = {
            name:"flora",
            sex: "female",
        }
        Object.defineProperty(person, 'age',{
            // value:18,
            // enumerable:true,  // 控制属性是否可以枚举,默认为false
            // writable:true, // 控制属性是否可以被修改,默认为false
            // configurable:true, //控制属性是否可以被删除,默认为false
            // 当有人读取person的age属性时,get函数就会被调用且返回值就是age的值
            get:function(){
                console.log("有人查询年龄了~")
                return number
            },
            // 当有人修改person的age属性时,set函数(setter)就会被调用且会收到修改的具体的值
            set(value){
                console.log("有人修改了age属性,且值是", value)
                number = value

            }
        })
        console.log(person)
        </script>
       
    </body>
</html>

何为数据代理

新建文件【何为数据代理.html】

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>_Object.defineProperty</title>
        <!-- 引入Vue -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    </head>
    <body>
        <!-- 数据代理:通过一个对象代理对另一个对象中的属性的操作(读/写) -->
        
        <!--阻止vue在启动时生成生产提示 -->
        <script type="text/javascript">
        Vue.config.productionTip=false
        let obj = {x:100}
        let obj2 = {y:200}
        Object.defineProperty(obj2, "x", {
            get(){
                return obj.x
            },
            set(value){
                obj.x=value
            }
        })
        </script>
       
    </body>
</html>

用浏览器打开文件,我们发现我们去修改obj2.x会同步修改obj.x。这个就是数据代理。
在这里插入图片描述

Vue中的数据代理

Vue中的数据代理,通过vm对象来代理data对象中属性的操作(读/写)。
Vue中数据代理的好处:更加方便的操作data中的数据。

基本原理:

  • 通过Object.defineProperty()把data对象中所有属性添加到vm上。
  • 为每一个添加到vm上的属性,都指定一个getter/setter。
  • 在getter/setter内部去操作(读/写)data中对应的属性。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值