2012-07-26 54 views
2

我想直接更新该函数的范围内的函数参数引用的对象。举个例子:javascript Object.assign()的功能

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()这样的库工具,如果我导入了库,我可以使用它,但它看起来好像可能有一些本地语法,这将允许我这样做,我只是一直无法找到它?..

我花了一些时间看,否则我尽量不要问这样的问题。我也知道还有其他类似的帖子,但这并不完全像我所要求的,我没有'名誉'这里能够直接回复帖子等,所以我没有看到一个简单的重点讨论的方式。无论如何,感谢您的帮助!

回答

2

你所要求的基本上是一个呼叫参考机制,或显式创建一个变量的引用的能力。在JavaScript中,这是不可能的。你可以(如你注意的)传递对象的引用,并使用它们修改对象属性值(甚至添加和删除属性),但这不完全相同。

+0

好的,谢谢你,这正是我所问的。我只是希望有办法做到这一点,比我一直在考虑的解决方法更直接一点。我想我会把它放在那里,看看是否有人有一个直接的解决方案。感谢您的回复! – jtrick 2012-07-26 19:54:27

+0

[https://groups.google.com/group/comp.lang.javascript/msg/d11c1e0674e0be28]涉及'arguments'对象,它允许通过引用调用机制,但它是这里没有用。 – 2012-07-26 20:17:14

+0

@ScottSauyet哇,那个线程... – Pointy 2012-07-26 20:23:32

1

这将是真正的JavaScript引用不支持的赋值。它只是支持错误的,被误解的参照类型。

+0

好的谢谢。我想我只能在一个比我所希望的要少一点优雅的解决方案中工作。 – jtrick 2012-07-26 19:56:12

0

既然你不能处理引用,你可以简单地把objRef作为一个全局变量,而不是将它作为arg传递。那么你正在更新原始对象。

+0

我很欣赏反馈,尽管在这种情况下我需要保护内存位置免受潜在的外部访问。我最初有一个封闭的封装的整个对象结构,并直接从'modFunc'(基本上是你所指的相同的机制)'thisObj'。在不同的情况下,你的建议可能会很有帮助;谢谢您的帮助。 – jtrick 2012-07-26 19:59:00