首页 > 解决方案 > 如何检测数字变量的变化?

问题描述

例如,我想当console.log()一个变量发生变化。JavaScript 基本上不提供变量的观察者。所以我想知道该怎么做。

对于对象和数组,我可以使用 Proxy,如下所示:

let proxy = new Proxy(arr, {
    deleteProperty: function(target, property) {
        console.log("Deleted %s", property);
        return true;
    },
    set: function(target, property, value, receiver) {
        target[property] = value;
        console.log("Set %s to %o", property, value);
        return true;
    }
});

但我不知道如何处理数字。如何使它们可观察?

标签: javascript

解决方案


您无法观察原始值。它们只是价值观。您将需要一个对象/函数包装器。一个简单的技巧是设置并获取相同的键,而不管您指定的键是什么,这实际上将对象性从对象中取出,感觉就像使用原语一样。

const number = new Proxy({ value : 5 }, {
  set: (obj, prop, value, receiver)  => { console.log('value set');  obj.value = value; return true },
  get: (obj, prop) =>  { console.log('value get');  return obj.value}
})

number.foo = 10

console.log(number.bar)


推荐阅读