Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript代理-中间添加其他属性_Javascript_Node.js - Fatal编程技术网

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如果我现在不在手机上,我会的。我不喜欢在手机上键入答案,因为我无法运行堆栈代码段,并且需要一段时间才能正确缩进代码。如果没有其他人先做的话,也许我以后会做。