vue的双向数据绑定原理

网上一堆所谓的面试题说的vue的双向数据绑定是Object.defineProperty实现的,啊对对对,说的没错,然后呢?没了????我丢,老子还以为真的就这么一句话可以了。

遇到这个问题,我当时的回答是通过Object.defineProperty()去监听对象的某个属性,当其被读取或者写入新数据的时候就会触发Object.defineProperty()的get和set方法,然后面试官就问了一句,还有吗。

还有吗,我不知道啊,我所看过的教程啥的都只讲到这

最近才刚看到另外的教程,还没看完,先写一部分出来吧。

上面的回答没错,但是不够完善。

我们在vm.data中赋值了数据之后,会调用initData方法,在initData中会将data的值拿去循环调用一个proxy代理,在这个代理中,我们会把原本访问的vm.data通过object.defineProperty()变成访问vm._data

就是在赋值vm.data的同时,也将vm.data的值赋值给vm._data,然后再用for循环给vm.data给绑定上Object.defineProperty,在这个Object.defineProperty中改变我们的读写对象,也就是在Object.defineProperty中的set操作中把vm.data赋值给了vm._data,又在get操作中把vm._data返回了出来。

例如我们访问的是vm.msg,但实际上我们读取的对象属性都是vm._data.msg;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值