var alpha = { a: 0, b: 0 };
var beta= alpha;
beta.b = 1;
现在alpha.b
是1。
为什么会发生这种情况,我该怎么办才能保持alpha.b
0?
答案 0 :(得分:4)
alpha和beta都是指向内存中的引用(即分配的堆)。因此,无论何时更改一个对象的属性,都会在另一个对象上反映出来;因为它们本质上指向同一个对象。
您应该将所有属性从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)
答案 1 :(得分:2)
alpha
和beta
是其值是同一对象引用的变量。
你想要的是克隆 alpha对象。我想你现在可以找到许多现有的实现,你知道要搜索的单词。
由于您的问题有JSON标记,我只是给出一个简单的实现(对循环对象不起作用):
var beta = JSON.parse(JSON.stringify(alpha));
答案 2 :(得分:0)
因为javascript变量保持对对象的引用。您将希望克隆一个对象以断开指向alpha.b。
的链接请参阅:What is the most efficient way to deep clone an object in JavaScript?