【问题标题】:javascript Object.assign() functionalityjavascript Object.assign() 功能
【发布时间】:2012-07-25 10:31:28
【问题描述】:

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

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 object pointers variable-assignment assign


    【解决方案1】:

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

    【讨论】:

    • 好的,谢谢,这正是我要问的。我只是希望有一些比我一直在考虑的解决方法更简单的方法。想我会把它放在那里,看看是否有人有直接的解决方案。感谢您的回复!
    • 有一个涉及arguments 对象的obscure corner case 允许引用调用机制,但在这里没有用处。
    • @Pointy - 是的,事情可能会偏离轨道! :-)
    • @ScottSauyet 哇,感谢您的链接。绝对是一些有趣的阅读。
    • @jtrick - 有趣的是它的存在。我不认为有很多——如果有的话! - 有用的利用它。但了解这些极端案例总是很有趣。
    【解决方案2】:

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

    【讨论】:

    • 好的,谢谢。我想我只需要在一个比我希望的更优雅的解决方案中工作。
    【解决方案3】:

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

    【讨论】:

    • 感谢您的反馈,但在这种情况下,我需要保护内存位置免受潜在的外部访问。我最初将整个对象构造封装在一个闭包中,并直接从“modFunc”内部作用于“thisObj”(基本上与您所指的机制相同)。在不同的情况下,您的建议会很好用;感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2012-03-16
    • 2021-04-07
    • 2017-03-01
    • 2011-01-28
    • 2011-05-03
    相关资源
    最近更新 更多