2

我想从该函数的范围内直接更新函数参数引用的对象。一个例子:

var thisObj = { "val" : "original value" }; 
function modFunc(objRef) {
    objRef = { "val" : "modified" };
    console.log(objRef);  // { "val" : "modified" }
}
console.log(thisObj);  // { "val" : "original value" };

我理解为什么会发生这种情况,并且我意识到我本可以使用

    objRef.val = "modified";

在 modFunc 中执行修改。不过,由于我的项目特定的原因,我希望能够完成类似的事情:

function modFunc(objRef) {
    objRef.self = { "val" : "modified" };  // Of course this will not work, 
    // but is there an Object property or method that allows one to access 
    // the actual memory pointer being referenced by the variable?
}

我可以指定我想直接修改 thisObj 以引用我在 modFunc 中实例化的新对象。这可能吗?我知道我可以使用 Object.assign() 之类的工具来执行此操作,但它不受普遍支持,或者我可以在导入库时使用诸如 bind() 之类的库工具,但似乎可能有一些本机语法可以让我做到这一点,而我只是找不到它?..

我花了一些时间寻找,否则我尽量不问这样的问题。我也知道还有其他与此类似的帖子,但与我所要求的完全不一样,而且我在这里没有能够直接回复帖子等的“声誉”,所以我没有看到一个简单的集中讨论的方式。无论如何,感谢您的帮助!

4

3 回答 3

2

本质上,您要求的是按引用调用机制,或显式创建对变量的引用的能力。在 JavaScript 中,这是不可能的。您可以(正如您所注意到的)传递对对象的引用并使用它们来修改对象属性值(甚至添加和删除属性),但这并不完全相同。

于 2012-07-26T18:51:31.473 回答
1

这将是 javascript 不支持的真正的引用分配。它只支持错误的、被误解的引用赋值。

于 2012-07-26T18:51:46.817 回答
0

由于您无法处理引用,因此您可以简单地创建objRef一个全局变量,而根本不将其作为 arg 传递。那么你正在更新原始对象。

于 2012-07-26T18:52:14.057 回答