JavaScript代理-中间添加其他属性
这是我的委托书:JavaScript代理-中间添加其他属性,javascript,node.js,Javascript,Node.js,这是我的委托书: const handler = { get: function(target, key) { const next = target.object[key]; if (typeof next === 'object' && next !== null) { return new Proxy({object: next}, handler) } else {
const handler = {
get: function(target, key) {
const next = target.object[key];
if (typeof next === 'object' && next !== null) {
return new Proxy({object: next}, handler)
} else {
return next;
}
}
}
const proxy = new Proxy({object: someObj}, handler);
基本上,我喜欢附加其他元数据,但在返回值时,我希望返回原始结果。在这里,我将实际对象存储在object
键下,稍后将向代理添加其他数据
这很好,但不幸的是,传递的对象不再通过引用传递,即
const proxy ...
// would log say "myName"
console.log(proxy.users[0].name);
proxy.users[0] = someOtherUser;
// Still logs "myName"
console.log(proxy.users[0].name);
为什么 您是否尝试过对
someObj
进行深度克隆,以便该数组仍然没有被引用?您还需要一个设置处理程序,用于在target.object
而不是代理上设置值。如果没有该proxy.users[0]=someOtherUser
通过代理向代理返回添加一个0
属性。用户而不是在基础对象上设置值。@Paulpro:回答。@FelixKling如果我现在不在手机上,我会的。我不喜欢在手机上键入答案,因为我无法运行堆栈代码段,并且需要一段时间才能正确缩进代码。如果没有其他人先这样做的话,也许我以后会这样做。您是否尝试过对someObj
进行深度克隆,以使数组不再被引用?您还需要一个集处理程序,它可以在target.object
上设置值,而不是在代理上设置值。如果没有该proxy.users[0]=someOtherUser
通过代理向代理返回添加一个0
属性。用户而不是在基础对象上设置值。@Paulpro:回答。@FelixKling如果我现在不在手机上,我会的。我不喜欢在手机上键入答案,因为我无法运行堆栈代码段,并且需要一段时间才能正确缩进代码。如果没有其他人先做的话,也许我以后会做。