vue__数据代理
- 数据代理: 通过一个对象代理对另一个对象中属性的操作(读/写)
- vue数据代理: 通过vm对象来代理data对象中所有属性的操作
- 好处:更方便的操作data中的数据
- 基本实现流程:
a: 通过Object.defineProperty()给 vm 添加 与 data 对象的属性对应的属性描述符
b: 所有添加的属性都包含 getter/setter
c: getter/setter 内部去操作 data中对应的属性数据 - 代码
_proxy:function(key){ // 保存vm var me = this; // 给 vm添加指定属性名的属性(使用的属性描述符) Object.defineProperty(me,key,{ configurable:false,// 不能重新定义 enumerable:true, // 可以枚举遍历 // 当通过vm.xxx读取属性值时调用, 从data中获取对应的属性值返回 代理读操作 git:function proxyGetter(){ return me._data[key]; }, // 当通过vm.xxx = value时 , value被保存到data中对应的属性上 代理写操作 set:function proxySetter(newVal){ me.data[key] = newVal; } } }