我正在尝试更新一个深度嵌套的对象,因此有一个相当长的名称,我不想继续输入我的代码。在本次讨论中,我将用较短的名称' target'来称呼它。
我首先用较短的名称来引用它' c':
update
然后我想用另一个对象更新其内容;称之为c = $.extend(c,update)
。
如果我使用c === target
,则对c的引用仍然完好无损&#39 ;;即c = {...c, ...update}
是真的。
但是,如果我使用c === target
,则会创建一个新变量;即target
是假的。我的原始.card {
text-align:center;
display:block;
border: none !important;
}
变量未更新。
我不明白为什么。谁能解释一下?
有一个垃圾箱答案 0 :(得分:2)
jQuery文档非常清楚extend()
的工作原理:
目标对象(第一个参数)将被修改,并且也将从$ .extend()返回
使用spread运算符是不同的。当你这样写:
c = {...c, ...update}
您正在创建一个新对象。然后指定c
指向该新对象。 c
之前指向的对象与此任何内容无关。它只是(来自:tc29/proposal):
将自己的可枚举属性从提供的对象复制到新创建的对象
要获得所需的行为,您可以使用Object.assign()
;
let target = {
name: "Mark",
place: "AK"
}
let c = target;
Object.assign(c, {
name: "Tim"
})
console.log(target)

答案 1 :(得分:0)
$.extend()
的描述如下:
将两个或多个对象的内容合并到第一个对象中。
意思是,合并两个对象并使用秒的属性(或第三个,第四个等)修改第一个对象
JavaScript is pass-by-reference,因此,在更新c
时(而不是在将其设置为新值时),您正在修改target
引用的同一对象。
c = {...c, ...update};
将c
设置为c
和update
的组合,而
$.extend(c,update);
通过添加c
的属性来修改update
作为引用的对象。
我希望能说清楚