vue2 源码学习笔记

68 阅读1分钟

vue2响应式 observe方法

export function observe(data) {
  if (typeof data != "object" || data == null) {
    return data;
  }
  return new Observer(data);
}
class Observer {
  constructor(data) {
    this.walk(data);
  }

  walk(data) {
    Object.keys(data).forEach((item) => defineReactive(data, key, data[key]));
  }
}
export function defineReactive(target, key, value) {
  //递归,每个属性都应该变为可观察的对象
  observe(value);
  Object.defineProperty(target, key, {
    get() {
      return value;
    },
    set(newValue) {
      if ((newValue = value)) return;
      observe(newValue);
      value = newValue;
    },
  });
}