深入浅出vue原理(四、computed实现)

453 阅读1分钟

vue原理系列

vue原理一

vue原理二

vue原理三

vue原理四

computed实现

在vue参数里传入


<div id="app">
  <p>a.a: {{ a.a }}</p>
  <p>b: {{ b }}</p>
  <p>{{ add }}</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
      a: { a: '1' },
      b: '2'
    },
    computed: {
      add() {
        return this.a.a + this.b;
      }
    }
});
 function Vue(options) {
    忽略...
    initCumputed.call(this);

  }

  function initCumputed() {
    let vm = this;
    // 拿到computed属性
    let computed = this.$options.computed;
    Object.keys(computed).forEach(k => {
      // debugger;
      Object.defineProperty(vm, k, {
        get:
          typeof computed[k] === 'function' ? computed[k] : computed[k].get, //判断是函数还是对象
        set() {}
      });
    });
  }