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

时间:2018-01-11 22:31:03

标签: javascript dictionary

我很抱歉标题质量低,但我不知道如何做得更好(欢迎编辑)。

请看这个代码示例:

BAR = 2                                                                         

class FOO:                                                                      
    BAR = BAR                                                                   
    a = foo(BAR)                                                                

    class FAZ:                                                                  
      a = foo(BAR)

您可以在该代码中看到结果为var a = {b: 1}; var c = {d: a, e: a}; c.d.b = 2; alert(c.e.b); // 2 not 1 ,但我希望它为2。似乎我依旧的字典在内存中共享相同的空间,但我想"修复"这一点。

显然,最简单的解决方案是没有任何1字典。

a

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

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

{b: 1}

功能

class a { // or -> var a = class { //?
    constructor() {
        this.b = 1;
    }
}
var c =  {d: new a(), e: new a()};

两者哪个更好?或者两者兼而有之,答案是另一个?

2 个答案:

答案 0 :(得分:0)

我可能会用

var a = {b:1}
var c = {}
c.d = Object.assign({}, a)
c.e = Object.assign({}, a)

object.assign将第二个参数的所有属性分配给第一个参数。

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

答案 1 :(得分:-1)

从我的角度来看,你实施课程的例子更好。

此外,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