假设我有一个像这样的代理实例:
const getProxy = function(){
return new Proxy({}, ...);
}
const proxy = getProxy();
稍后,我想从代理中检索目标,有什么办法可以做到这一点吗?类似的东西:
const target = proxy.getOriginalTarget()
答案 0 :(得分:2)
在某些情况下,我常使用的一种解决方法是使用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}
此技巧要注意的一件事是,新对象的属性可以等同于原始对象的属性,但是整个对象不能,例如:
originalTarget === test // false
originalTarget == test // false
originalTarget.name === test.name // true
originalTarget.test === test.test // true
答案 1 :(得分:2)
只需将其解构为一个新对象:
myNewSimpleObject = {...myProxy}
干杯!
答案 2 :(得分:0)
我还没有听说过标准解决方案,但是您可以构建工厂函数,该函数返回具有自定义属性的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