var alpha = { a: 0, b: 0 };
var beta= alpha;
beta.b = 1;
现在 alpha.b
为 1。
为什么会发生这种情况?我该怎么做才能保持 alpha.b
0?
最佳答案
alpha 和 beta 都是指向内存中相同内容的引用(即分配的堆)。因此,每当您更改一个对象的属性时,都会立即反射(reflect)在另一个对象上;因为它们本质上指向同一个对象。
您应该将所有属性从 alpha 复制到 beta
var alpha = { a: 0, b: 0 },
beta = { };
for(var prop in alpha){
if(alpha.hasOwnProperty(prop)){
beta[prop] = alpha[prop];
}
}
你的对象有点简单。您可能会遇到嵌套对象的情况,例如
var alpha = {
propA: {},
propB: {}
}
在这种情况下,您需要所谓的深度克隆;也就是说,您需要递归地克隆复杂的属性。
如果您已经在使用 jquery,则可以利用 extend
方法
$.extend(true, beta, alpha)
关于javascript - 为什么 JS 对象会有这样的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21728975/