Javascript 为什么我的两个对象存储为一个并共享值?

Javascript 为什么我的两个对象存储为一个并共享值?,javascript,dictionary,Javascript,Dictionary,我为低质量的标题感到抱歉,但我不知道如何使它更好(欢迎编辑) 请看以下代码示例: var a = {b: 1}; var c = {d: a, e: a}; c.d.b = 2; alert(c.e.b); // 2 not 1 就像你在代码中看到的那样,结果是2,但我希望它是1。看起来我的嵌套字典在内存中共享相同的空间,但我想“修复”它 显然,最简单的解决方案不会有任何字典 var c = {d: {b: 1}, e: {b: 1}}; 但是我不想要这个解决方案,因为我必须编写多次{b:1

我为低质量的标题感到抱歉,但我不知道如何使它更好(欢迎编辑)

请看以下代码示例:

var a = {b: 1};
var c = {d: a, e: a};
c.d.b = 2;
alert(c.e.b); // 2 not 1
就像你在代码中看到的那样,结果是
2
,但我希望它是
1
。看起来我的嵌套字典在内存中共享相同的空间,但我想“修复”它

显然,最简单的解决方案不会有任何
字典

var c = {d: {b: 1}, e: {b: 1}};
但是我不想要这个解决方案,因为我必须编写多次
{b:1}

然后我开发了两个解决方案,但我想知道哪一个更好,或者是否有更好的解决方案

班 作用 两者中哪一个更好?或者两者中的任何一个,答案是另一个?

我可能会使用

var a = {b:1}
var c = {}
c.d = Object.assign({}, a)
c.e = Object.assign({}, a)
object.assign
将第二个参数的所有属性指定给第一个参数中的对象


我觉得这种方法在直觉上与您在第一个问题中所做的非常相似,而且如果您的
对象不是您定义的对象,例如JSON,那么这种方法也是更好的解决方案。

从我的角度来看,您实现类的示例是更好的

javascript中还有一种更老的方法,通过使用
JSON.parse(JSON.stringify(object))

就你而言:

var a = {b: 1};
var c = {
    d: JSON.parse(JSON.stringify(a)),
    e: JSON.parse(JSON.stringify(a))
};
c.d.b = 2;
alert(c.e.b); // 1

在Javascript中,这些被称为对象,而不是字典,看起来你想做的是,所以希望这对研究这个问题的答案有用。你知道为什么你必须写
{}
?你能解释一下吗?正如我说的,
Object.assign
接受两个参数,接受第二个参数的所有属性,并将它们分配给第一个参数。作为第一个参数的
{}
只是一个空对象-它有效地将所有属性复制到一个全新的对象中,最终与第一个相同。
var a = {b:1}
var c = {}
c.d = Object.assign({}, a)
c.e = Object.assign({}, a)
var a = {b: 1};
var c = {
    d: JSON.parse(JSON.stringify(a)),
    e: JSON.parse(JSON.stringify(a))
};
c.d.b = 2;
alert(c.e.b); // 1