阅读背景:

js 数据监听--对象的变化

来源:互联网 
class Observer {
    constructor(data) {
        this.data = data;
        this.filterObj(data);
    }
    static isObject(obj) {
        if (Object.prototype.toString.call(obj) === "[object Object]") {
            return true;
        }
        return false;

    }
    filterObj(data) {
        if (!Observer.isObject(data)) return;
        for (const key in data) {
            // 过滤原型链上的属性。
            if (data.hasOwnProperty(key)) {
                const value = data[key];
                if (Observer.isObject(data[key])) {
                    new Observer(data[key]);
                };
                this.watch(key, value);
            }
        }
    }
    watch(k, v) {
        Object.defineProperty(this.data, k, {
            enumerable: true,
            configurable: true,
            get: function () {
                console.log(`${k},被访问。`)
                return v;
            },
            set: function (newV) {
                console.log(`${k},属性值发生变化。`)
                console.log(`新的值为:${JSON.stringify(newV)}。`)
                if (Observer.isObject(newV)) {
                    new Observer(newV);
                }
                v = newV;
            },
        })
    }
}
let data = {
    time: '2048',
    user: {
        name: 'naruto',
        equipment: {
            arms: 'kuwu',
            ArmGuard: 'long',
        }
    },
};

const app = new Observer(data);class Observer {
    constructor(data) {
      



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: