ES6 Proxy与Reflect实现观察者模式

   //观察者模式
        //监听对象属性的修改,如果属性值发生变化,打印出对象的属性信息(to do somthing)

        let queuedObservers = new Set()
        //将需要处理的函数,添加到set结构中
        let observe = fn => queuedObservers.add(fn)

        //需要执行的操作
        function print() {
            console.log(`${proxy.name},${proxy.age}`)
        }
        observe(print)

        //创建对象的代理对象,拦截对象属性的赋值操作
        let observable = obj => new Proxy(obj, {
            //拦截对象属性的赋值操作
            set(target, key, value, receiver) {
                //通过Reflect对目标对象进行属性的赋值
                Reflect.set(target, key, value, receiver)
                //发出通知 ( to do somthing)
                queuedObservers.forEach(observe => observe())
            }
        })

        let target = {
            name: "令狐狐冲",
            age: 18,
            __skill__: "独孤九剑"
        }
        //根据目标对象生成对应的代理对象
        let proxy = observable(target)
        proxy.name = "tom"

上一篇:【javascript】反射Reflect


下一篇:反射概述及使用(扩展类路径下文件的绝对路径)