Javascript 如何从函数返回新对象而不进行深度复制
我有一个返回其他对象的函数,我需要这个对象的一些克隆,以便以某种方式处理它。该对象具有复杂的数组属性,我希望它是任意的,不受任何数据类型的限制 但是当我这样做的时候,它在两个对象上变成了相同的引用,并且相同的变化对两个对象都有影响 在调查了这个问题之后,我发现如果从函数返回的对象在JS的全局范围内,那么它将是相同的引用,但是如果它是函数上的本地对象,那么它将是新的 例如,请参阅代码。当我从func1中指定x和y时,它们是相同的,但当我使用func2时,它们都是另一个 我正试图通过使用第三种工具,或者通过我自己的服务功能手动完成对对象的深度复制 这个问题有一个简单的解决方法吗?我很高兴知道为了理解这一点需要学习什么 谢谢Javascript 如何从函数返回新对象而不进行深度复制,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个返回其他对象的函数,我需要这个对象的一些克隆,以便以某种方式处理它。该对象具有复杂的数组属性,我希望它是任意的,不受任何数据类型的限制 但是当我这样做的时候,它在两个对象上变成了相同的引用,并且相同的变化对两个对象都有影响 在调查了这个问题之后,我发现如果从函数返回的对象在JS的全局范围内,那么它将是相同的引用,但是如果它是函数上的本地对象,那么它将是新的 例如,请参阅代码。当我从func1中指定x和y时,它们是相同的,但当我使用func2时,它们都是另一个 我正试图通过使用第三种工具,
let obj1 = {
a:"Ay",
b: "Bi"
}
function func1(){
return obj1;
}
let x = func1 ();
let y = func1();
console.log(x , y);
x.a = "new value1 ";
console.log(x , y);
//both x & y changed
function func2(){
let obj2 = {
a:"Ay",
b: "Bi"
}
return obj2;
}
x = func2 ();
y = func2();
console.log(x , y);
x.a = "other value1 ";
console.log(x , y);
//only x have changed
对象在Javascript中通过引用传递,您可以使用Javascript创建克隆 设obj1={ a:是的, b:Bi } 函数func1{ 返回{…obj1}; } 设x=func1; 设y=func1; 精神病学; x、 a=新值1; console.logx,y; 函数func2{ 返回{ a:是的, b:Bi } } x=2; y=func2; console.logx,y; x、 a=其他值1;
console.logx,y;请记住,这只会生成一个浅拷贝。@Seblor是的,我知道,这就是为什么添加了具有进行深拷贝方法的链接。不进行深拷贝的意思不清楚-这不正是您想要做的吗?有简单的解决方案吗?-您已经找到了它:只需将对象文字移动到函数中,以便在每次调用时都能重新创建它。@Bergi未手动操作,只需使用函数即可。谢谢你和其他人。