Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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 Object.assign()功能_Javascript_Object_Pointers_Variable Assignment_Assign - Fatal编程技术网

javascript Object.assign()功能

javascript Object.assign()功能,javascript,object,pointers,variable-assignment,assign,Javascript,Object,Pointers,Variable Assignment,Assign,我想直接在函数的作用域内更新函数参数引用的对象。例如: var thisObj = { "val" : "original value" }; function modFunc(objRef) { objRef = { "val" : "modified" }; console.log(objRef); // { "val" : "modified" } } console.log(thisObj); // { "val" : "original value" }; 我明

我想直接在函数的作用域内更新函数参数引用的对象。例如:

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(),我可以在导入库时使用,但似乎有一些本机语法允许我做这件事,而我就是找不到它


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

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

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

由于您无法处理引用,您可以简单地将
objRef
设置为全局变量,而不将其作为arg传递。然后您将更新原始对象。

好的,谢谢,这正是我要问的。我只是希望有一种比我一直在考虑的解决方法更简单的方法。我想我会把它放在那里,看看是否有人有直接的解决办法。谢谢你的回复!有一个包含
参数的
对象,它允许通过引用机制调用,但在这里它没有用。@Pointy-是的,事情可能会偏离正轨!:-)@ScottSauyet哇,谢谢你的链接。肯定是一些有趣的阅读。@jtrick-有趣的是它的存在。我不认为有很多,如果有的话对它的有益利用。但是知道这些角落的案子总是很有趣的。好的,谢谢。我想我将不得不在一个比我所希望的稍微不那么优雅的解决方案中工作。我感谢反馈,尽管在这种情况下,我需要保护内存位置免受潜在的外部访问。我最初将整个对象构造封装在一个闭包中,并直接从“modFunc”(本质上与您所指的机制相同)中对“thisObj”进行操作。在另一种情况下,你的建议会很有效;谢谢你的帮助。