Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从函数返回新对象而不进行深度复制_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 如何从函数返回新对象而不进行深度复制

Javascript 如何从函数返回新对象而不进行深度复制,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个返回其他对象的函数,我需要这个对象的一些克隆,以便以某种方式处理它。该对象具有复杂的数组属性,我希望它是任意的,不受任何数据类型的限制 但是当我这样做的时候,它在两个对象上变成了相同的引用,并且相同的变化对两个对象都有影响 在调查了这个问题之后,我发现如果从函数返回的对象在JS的全局范围内,那么它将是相同的引用,但是如果它是函数上的本地对象,那么它将是新的 例如,请参阅代码。当我从func1中指定x和y时,它们是相同的,但当我使用func2时,它们都是另一个 我正试图通过使用第三种工具,

我有一个返回其他对象的函数,我需要这个对象的一些克隆,以便以某种方式处理它。该对象具有复杂的数组属性,我希望它是任意的,不受任何数据类型的限制

但是当我这样做的时候,它在两个对象上变成了相同的引用,并且相同的变化对两个对象都有影响

在调查了这个问题之后,我发现如果从函数返回的对象在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未手动操作,只需使用函数即可。谢谢你和其他人。