Sunny-117 / js-challenges

✨✨✨ Challenge your JavaScript programming limits step by step

Home Page:https://juejin.cn/column/7244788137410560055

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

手写vue2响应式

DiF1202 opened this issue · comments

let data = {
  name: "hdf",
  age: 19,
  friend: {
    name: "zwl"
  }
};

//变成响应式数据
observer(data);

function observer(target) {
  if (!target || typeof target == "object") {
    return target;
  }

  for (let key in target) {
    defineReactive(target, key, target[key]);
  }
}

function defineReactive(target, key, value) {
  //深度观察
  observer(value);

  Object.defineProperty(target, key),
    {
      get() {
        return value;
      },
      set(newValue) {
        observer(newValue);
        if (newValue !== value) {
          value = newValue;
          console.log("更新视图");
        }
      }
    };
}