JS实现监听对象属性变化的函数

2024-04-10  本文已影响0人  我没叫阿
function observe(obj) {
    for (let key in obj) {
        let val = obj[key];
        Object.defineProperty(obj, key, {
            enumerable: true,
            configurable: true,
            get: function () {
                return val;
            },
            set: function (newVal) {
                if (newVal !== val) {
                    console.log(`属性 ${key} 从 ${val} 变成了 ${newVal}`);
                    val = newVal;
                }
            }
        });
    }
}

let obj = { count: 0 };
observe(obj);
obj.count = 1;  
function observe(obj) {
    return new Proxy(obj, {
        get(target, propKey, receiver) {
            return Reflect.get(target, propKey, receiver);
        },
        set(target, propKey, value, receiver) {
            let oldValue = target[propKey];
            if (value !== oldValue) {
                console.log(`属性 ${propKey} 从  ${oldValue} 变成了 ${value}`);
            }
            return Reflect.set(target, propKey, value, receiver);
        }
    });
}

let obj = { name: 'zs', age: 20, gender: 'male' };
obj = observe(obj);
obj.age = 1;  
上一篇 下一篇

猜你喜欢

热点阅读