晚上可能已经太晚了,我可能会变得疯狂,但这怎么可能。
我有以下情况:
var x = {a: [], b: []};
var y = {a: [], b: []};
Model.someFunction(obj1, function(res){
x.a = res;
y.a = res;
Model.someFunction(obj2, function(res){
x.b = res;
y.b = res;
macheWasAnderes();
// Content of both objects:
// x = {a: [punkt1: 20, punkt2: 30}, b: {punkt1: 50, punkt2: 60}]};
// y = {a: [punkt1: 20, punkt2: 30}, b: {punkt1: 50, punkt2: 60}]};
});
});
function macheWasAnderes(){
for(let prop in x){
for(let i = 0; i < x[prop].length; i++){
for(let propa in x[prop][i]){
x[prop][i][propa] = x[prop][i][propa] / 100;
}
}
}
console.log("x", x);
console.log("y", y);
// x = {a: [punkt1: 0.02, punkt2: 0.03}, b: {punkt1: 0.05, punkt2: 0.06}]};
// y = {a: [punkt1: 0.02, punkt2: 0.03}, b: {punkt1: 0.05, punkt2: 0.06}]};
}
正如您所看到的,我从模型函数的回调中收到了一些数据。 当这些完成后,我调用machWasAnderes()函数,以便用我的x对象进行计算。 对于这个例子,我只是将它的值除以一百,并以此方式保存。
当我打印出两个对象时,奇怪的是,对象y也得到了计算值......
这怎么可能?
注意这不是我的确切代码。我的代码要长得多,所以我创建了一个包含问题的简单代码副本。
答案 0 :(得分:-2)
让我们来看一些基础知识。有两种类型的副本:浅拷贝和深拷贝。
来你的案子: 当你说
x.a = res;
y.a = res;
两者都指的是与浅拷贝相同的对象。
因此,当您更改x.a
时,它也会影响y.a
。
x.b
和y.b
阅读本文.. https://nikhilmachcha.wordpress.com/2015/08/24/deep-copy-vs-shallow-copy-php-way/
希望这可以帮助你!!