美文网首页
用 proxy 实现简易的数据响应式

用 proxy 实现简易的数据响应式

作者: 不弹钢琴的友人A | 来源:发表于2019-02-02 13:42 被阅读0次

    通过 es6 Proxy 来实现一个数据响应式

    // obj 对象  setBind set方法  getLogger get方法
    let onWatch = (obj, setBind, getLogger) => {
      let handler = {
        // target 是要拦截的目标  
        get(target, property, receiver) {
          getLogger(target, property)
          // target 目标对象 property 对应属性 receiver setter方法
          return Reflect.get(target, property, receiver)
        },
        set(target, property, value, receiver) {
          setBind(value, property)
          // 相当于 vue的 $set
          return Reflect.set(target, property, value)
        }
      }
      // obj 需要拦截的对象  handler 拦截行为
      return new Proxy(obj, handler)
    }
    
    let obj = { a: 1 }
    let p = onWatch(
      obj,
      (v, property) => {
        console.log(`监听到属性${property}改变为${v}`)
      },
      (target, property) => {
        console.log(`'${property}' = ${target[property]}`)
      }  
    )
    p.a = 2   // 输出 监听到属性a改变为2
    p.a         // 输出 'a' = 2

    相关文章

      网友评论

          本文标题:用 proxy 实现简易的数据响应式

          本文链接:https://www.haomeiwen.com/subject/mfhssqtx.html