• Vue08 数据代理


    1 说明

      所谓“数据代理”,是指 通过一个对象代理对另一个对象的属性进行读或写操作。

    2 简单示例

    2.1 代码

    let obj = {x:100};
    let obj2 = {y:200};
    Object.defineProperty(obj2,"x",{
        get(){
            return obj.x;
        },
        set(value){
            obj.x = value;
        }
    })

     

    2.2 效果

      通过obj2代理对obj的属性进行操作,如下所示

      设置obj2.x=333,obj.x值也改变

     

    3 Vue中的数据代理

    3.1 代码

    <body>
    
       <div id="root">
        <h1>{{name}}</h1>
        <h1>{{address}}</h1>
    
       </div>
    
       <script type="text/javascript" >
    
        let data = {
            name:'历史',
            address:'杭州'
        }
    
        const vm = new Vue({
            el:'#root',
            data
        })
    
        </script>
    
    
    </body>

    3.2 效果

      Vue中的数据代理是:通过vm对象代理对data对象的属性进行操作(读或写),如下所示

      设置vm.name的值,data.name也改变

     

    另外,请注意一点:vm._data === data,返回true

    3.3 基本原理

    3.3.1 说明

      Vue中数据代理的基本原理是,通过Object.defineProperty()将data对象中的属性添加到vm对象上,并为每个添加到vm上的属性指定getter和setter,在getter和setter中对data对象的属性进行读或写操作

    3.3.2 示例

      代码同上

      控制台查看vm对象,发现它有address属性和name属性,还有一个_data属性

      查看这三个属性的值,发现就是data对象的值。

      

      所以vue是这么做的,data对象放在_data里面,且在vm最外层添加了属性address和name,并且给了setter和getter函数,代理data对象

    3.3.3 图示

  • 相关阅读:
    企业在线学习平台开发02
    企业在线学习平台开发01
    20200807-1
    20200801-01
    16用户体验评价-补
    13第一阶段意见评审-补
    11单词统计-补
    09用户模板和用户场景-补
    08顶会热词统计-补
    时间 Java
  • 原文地址:https://www.cnblogs.com/jthr/p/16405593.html
Copyright © 2020-2023  润新知