我很抱歉标题质量低,但我不知道如何做得更好(欢迎编辑)。
请看这个代码示例:
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()};
两者哪个更好?或者两者兼而有之,答案是另一个?
答案 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