观察者_js

class dataCenter {
    /**
     * 初始化
     */
    constructor(fn_list=[],...args) {
        this.fn_list = fn_list;
        this.data = args
        return new  Proxy(this.data,this.handler)
    }
    /**
     * handler  数据劫持
     */
    handler = () => {
        get: function(target, propKey, receiver) {
            return Reflect.get(target, propKey, receiver);
        },
        set: function(target, propKey, value, receiver) {
            this.cb(value,receiver)
            return Reflect.set(target, propKey, value, receiver);
        }
    }
    /**
     * 注册回调->观察者
     */
    ob=(fn)=>{
        this.fn_list.push(fn)
    }
    /**
     * 发布者
     */
    cb=(newvalue,oldValue)=>{
        const fn_list = this.fn_list;
        for(var i in fn_list){
            fn_list[i](newvalue,oldValue)
        }
    }
    remove=(fn)=>{
        //在当前回调列表移除该函数
    }
    

}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 ggchzzz@163.com

文章标题:观察者_js

字数:124

本文作者:ggchzzz

发布时间:2021-03-17, 22:44:58

最后更新:2023-12-22, 23:17:54

原始链接:https://anska.info/post/b53e578d.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

github