vue双向绑定解析

function observable(obj){
  if(!obj || typeof obj !== 'object') {
    return;
  }
  let keys = Object.keys(obj);
  keys.forEach((key) => {
    defineReactive(obj,  key, obj[key])
  })
  return obj;
}
class Dep{
    constructor(){
      this.sub = []
    },
    //增加订阅者
    addSub(sub){
      this.subs.push(sub);
    },
    //判断是否增加订阅者
    //通知订阅者更新
    notify(){
      this.subs.forEach((sub) => {
        sub.update();
      })
    }
}
function defineReactive(obj, key, val){
  let dep = new Dep();
  observable(obj)
  Object.defineProperty(obj, key, {
    get(){
      dep.addSub();
      console.log(`${key}属性被读取了`);
      return val;
    },
    set(newVal){
      val = newVal;
      console.log(`${key}属性被修改了`);
      dep.notify();
    }
  }
 }
 let obj = {};
 observable(obj);
全部评论

相关推荐

见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务