使用 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);
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);