【发布时间】:2014-03-10 20:09:40
【问题描述】:
var alpha = { a: 0, b: 0 };
var beta= alpha;
beta.b = 1;
现在alpha.b 是 1。
为什么会发生这种情况,我该怎么做才能保持alpha.b 0?
【问题讨论】:
标签: javascript json object
var alpha = { a: 0, b: 0 };
var beta= alpha;
beta.b = 1;
现在alpha.b 是 1。
为什么会发生这种情况,我该怎么做才能保持alpha.b 0?
【问题讨论】:
标签: javascript json object
alpha 和 beta 是变量,其值是同一对象的引用。
您想要克隆 alpha 对象。既然您知道要搜索的词,我想您会发现许多现有的实现。
由于你的问题有 JSON 标签,我只给出一个简单的实现(不适用于循环对象):
var beta = JSON.parse(JSON.stringify(alpha));
【讨论】:
window)。
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)
【讨论】:
因为 javascript veriable 保留了对对象的引用。您将需要克隆一个对象以断开与 alpha.b 的链接。
见:What is the most efficient way to deep clone an object in JavaScript?
【讨论】: