vue中的数据代理

数据代理是什么:

通过一个对象代理,对另一个对象中属性的操作
简单就是说:可以通过 对象b 对 对象a 中的属性进行操作
这里我学到的数据代理是用Object.defineProperty这个方法进行操作

		let obj = {x:100};
        let obj2 = {y:200};

        Object.defineProperty(obj2,'x',{
            get(){
                return obj.x;  //这里添加的obj2的属性x得到了getter返回的值
            },
            set(value){
                obj.x = value; //这里修改obj2的x值时就会调用setter,并把修改的值返回给value
            }
        })

这里补充讲一下Object.defineProperty中的getter和setter

利用上面的代码分析一下:

当读取 obj2.x 时,就会调用getter,然后把getter中的返回的值给obj2.x
。。。
当有人修改 obj.2 时,就会调用setter,并且得到修改的具体值,然后返回给value

vue中的数据代理

总结:

1.vue中的数据代理:
通过vm对象来处理data对象中属性的操作

2.vue中数据代理的好处:
更加方便的操作data中的数据

3.基本原理:
通过Object.defineProperty() 把data对象中所有属性添加到vm上
为每一个添加到vm上的属性,都指定一个getter/setter
在getter/setter内部去操作data中对应的属性

解析:

const vm = new Vue({
            el: '.root',
            data: {
                name:'小张',
            }
        })

数据代理在vue中的作用:

就是把data中的属性放到vm中一份,就是为了让编码更方便
就是可以通过vm对data中的属性进行操作(这就是数据代理的定义)
data中的属性直接就放在了vm中,可以利用setter和getter对data进行操作

工作原理:
为每一个添加到vm上的属性,都指定一个getter/setter

getter
去读取vm.name时,就会利用getter去读取返回data中name的值

(这里我理解的是:vm.name中的getter它一直返回的值就是data中的name值,就是getter这个东西里面的那个return后面的东西就是data.name)

 Object.defineProperty(vm,'name',{
       getter() {
           return data.name
       }
   })

setter
修改vm.name时,就会利用setter去修改data中的name,然后页面中用到name的地方就会发生改变

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值