zoukankan      html  css  js  c++  java
  • js 对象数据观察者实现

    var observer = function (originalData) {
        var newData = {};
        newData.observer = {};
        newData.$data = {};
        for (var key in originalData) {
            (function (key) {
                newData.$data[key] = originalData[key];
                Object.defineProperty(newData, key, {
                    set: function (val) {
                        newData.$data[key] = val;
                        this.dispatch(key, val);
                    },
                    get: function () {
                        return newData.$data[key];
                    }
                });
                newData.observer[key] = [];
            })(key);
        }
        newData.on = function (key, callback) {
            newData.observer[key].push(callback);
        };
        newData.dispatch = function (key, val) {
            for (var i in newData.observer[key]) {
                newData.observer[key][i](val);
            }
        };
        return newData;
    };
    var data = observer({age: 1, name: 'mahuan'});
    
    
    data.on('name', function (val) {
        console.log('hello, ' + val);
    });
    data.on('age', function (val) {
        console.log('oh, you are ' + val);
    });
    data.name = "mahuan";
    data.age = 3;

    hello, mahuan
    oh, you are 3

  • 相关阅读:
    作业2 身份认证(正心13)
    ubuntu16内核升级过程遇到的问题
    「」
    「loj
    「一个经典问题的另一个推导方法」
    「loj
    「XXI Opencup GP of Tokyo」 Count Min Ratio
    「codeforces
    「codeforces
    「Dominator Tree」
  • 原文地址:https://www.cnblogs.com/mahuan2/p/7079419.html
Copyright © 2011-2022 走看看