假设我有一个像这样的代理实例:
const getProxy = function(){
return new Proxy({}, ...);
}
const proxy = getProxy();
稍后,我想从代理中检索目标,有什么办法吗?就像是:
const target = proxy.getOriginalTarget()
假设我有一个像这样的代理实例:
const getProxy = function(){
return new Proxy({}, ...);
}
const proxy = getProxy();
稍后,我想从代理中检索目标,有什么办法吗?就像是:
const target = proxy.getOriginalTarget()
只需将其解构为一个新对象:
myNewSimpleObject = {...myProxy}
干杯!
我还没有听说过标准解决方案,但您可以构建您的工厂函数,该函数返回new Proxy
具有自定义属性的对象:
function buildProxy(target, handler) {
const proxy = new Proxy(target, handler);
proxy.originalTarget = target;
return proxy;
}
const test = {};
const handler = {};
buildProxy(test, handler).originalTarget === test; // true
在某些情况下,我用来解决此问题的一种技巧是使用 JSON.stringify 剥离 Proxy 对象,然后使用 JSON.parse 将其作为对象返回:
const test = {name: 'Proxy', test: true};
const handler = {};
const proxy = new Proxy(test, handler); // Proxy {name: "Proxy", test: true}
originalTarget = JSON.parse(JSON.stringify(proxy)); // {name: 'Proxy', test: true}
这个 hack 需要注意的重要一点是,新对象的属性可以等同于原始对象的属性,但整个对象不能,例如:
originalTarget === test // false
originalTarget == test // false
originalTarget.name === test.name // true
originalTarget.test === test.test // true