javascript 使用代理检测全局对象中的更改

gojuced7  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(128)
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发生更改时,我都会尝试检测任何更改,但它不会记录任何内容。我做错了什么?

ldfqzlk8

ldfqzlk81#

只有当 *Proxy本身 * 是后来“更改”的值(通过属性分配或任何陷阱)时,Proxy才会显示为执行任何操作。
如果你有一个现有的对象,为它创建一个代理 Package 器,然后应用程序的其他部分使用 * 现有的对象 *,你不会看到代理发生任何事情;对象的其他部分必须具有 * 代理 * 而不是原始对象。
在这里,您可以将window.app重新分配给Proxy,以便其他对window.app的引用现在改为引用Proxy。

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

相关问题