使用 Proxy 检测全局对象的变化

Detecting changes in a global object using Proxy

    const scopeHandler = {
        set: function(obj, prop, value) {
            console.log(`${prop} changed from ${obj[prop]} to ${value}`);
            obj[prop] = value;
            return true;
        }
    };
    const scopeProxy = new Proxy(window.app, scopeHandler);

因此,每当 app 或其任何子项 app.reports 发生更改时,我都会尝试检测任何更改,但它不会记录任何内容。我做错了什么?

如果 Proxy 本身 是稍后“更改”的值(通过 属性 赋值或您拥有的任何陷阱),则 Proxy 似乎只会执行任何操作。

如果您有一个现有对象,请为其创建一个代理包装器,然后应用程序的其他部分使用现有对象,您不会看到代理;对象的其他部分必须有 代理 而不是原始对象。

在这里,您可以将 window.app 重新分配给代理,这样对 window.app 的其他引用现在可以引用代理。

window.app = new Proxy(window.app, scopeHandler);