gpt4 book ai didi

JavaScript 传播语法与 jQuery $.extend - ByRef 和 ByVal

转载 作者:行者123 更新时间:2023-11-30 14:37:42 25 4
gpt4 key购买 nike

我正在尝试更新一个深度嵌套的对象,因此名称相当长,我不想在我的代码中继续输入。在本次讨论中,我将使用更短的名称“目标”来调用它。

我首先用较短的名称“c”来指代它:

c = 目标

然后我想使用另一个对象更新它的内容;称之为更新

如果我使用 c = $.extend(c,update),对 c 的引用保持“完整”;即 c === target 为真。

但是,如果我使用 c = {...c, ...update},就会创建一个新变量;即 c === target 为假。我的原始 target 变量未更新。

我不明白为什么。谁能解释一下?

$extends vs JavaScript spread 处有一个垃圾箱

最佳答案

jQuery 文档非常清楚 extend() 的工作原理:

the target object (first argument) will be modified, and will also be returned from $.extend()

使用展开运算符是不同的。当你这样写时:

c = {...c, ...update}

您正在创建一个新对象。然后,您分配 c 以指向该新对象。 c 之前指向的对象与这一切无关。它只是(来自:tc29/proposal):

copies own enumerable properties from a provided object onto the newly created object

要获得您想要的行为,您可以使用 Object.assign();

let target = {
name: "Mark",
place: "AK"
}

let c = target;

Object.assign(c, {
name: "Tim"
})
console.log(target)

关于JavaScript 传播语法与 jQuery $.extend - ByRef 和 ByVal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com