数据代理,何为数据代理以及vue中的数据代理

902 阅读1分钟

数据代理

首先何为数据代理,简单的说,就是通过一个对象代理对另一个对象中属性的操作(读/写), 代码如下:


   //首先声明两个对象obj和obj2
   let obj = {x:100}
   let obj2 = {y:200}
                        
   //其次利用Object.defineProperty中的setter方法通过对象obj2来操作obj中的属性
    Object.defineProperty(obj2,'x',{
	set(value){
            obj.x = value
            }
	})

Vue中的数据代理

1.Vue中的数据代理:
            通过vm对象来代理data对象中属性的操作(读/写)
	2.Vue中数据代理的好处:
			更加方便的操作data中的数据
	3.基本原理:
                Vue通过Object.defineProperty()把data对象中所有属性添加到vm上。
		为每一个添加到vm上的属性,都指定一个getter/setter。
		在getter/setter内部去操作(读/写)data中对应的属性。
                
   代码如下:
    <!-- 准备好一个容器-->
<div id="root">
    <h2>学校名称:{{name}}</h2>
    <h2>学校地址:{{address}}</h2>
</div>

<script>
    const vm = new Vue({
	data(){
            return{
                name:'清华大学',
		address:'北京市清华园'
            }
        }
    }).$mount('#root')
</script>

我们通过new Vue() 得到了一个 vm 实例对象 接下来我们打印 vm 实例对象

在实例对象中出现了 name 和 address 两个属性

20210726130843628.png 鼠标放上去会提示 Invoke property getter 在实例的最下面还有着两个属性的 set和get 方法 

20210726131347178.png

现在我们得知这两个属性是由Vue通过Object.defineProperty()添加上去的 所以当我们通过vm(vm.name)读name的时候实际读的就是data中的name 当我们改的时候(vm.name = '北京大学')改的也是data中的name。

就是说通过vm对象来代理data对象中属性的操作(读/写),这样更方便操作data中的数据。