微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐