当前位置:   article > 正文

Vue 2.3.4源码分析之双向绑定原理_closure-with-arguments

closure-with-arguments

    要想实现双向绑定需要做到两点:1.如何监听data对象是否改变;2.对象变化后如何去更新视图

    一、如何监听data对象是否改变

     在Vue监听data对象是否改变主要通过defineReactive方法来做到的,就是利用Object.defineProperty的get和set方法。如下代码所示:

  1. export function defineReactive (
  2. obj: Object,
  3. key: string,
  4. val: any,
  5. customSetter?: Function
  6. ) {
  7. const dep = new Dep()//每个监听的对象都新建一个dep对象,dep相当于观察者模式中的被观察对象,watcher相当于观察者对象
  8. const property = Object.getOwnPropertyDescriptor(obj, key)
  9. if (property && property.configurable === false) {
  10. return
  11. }
  12. // cater for pre-defined getter/setters
  13. const getter = property && property.get
  14. const setter = property && property.set
  15. let childOb = observe(val)
  16. Object.defineProperty(obj, key, {
  17. enumerable: true,
  18. configurable: true,
  19. get: function reactiveGetter () {
  20. const value = getter ? getter.call(obj) : val
  21. if (Dep.target) {
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/248230
推荐阅读
相关标签
  

闽ICP备14008679号