Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 替换一个对象';s属性与另一个属性的属性?_Javascript_Clone - Fatal编程技术网

Javascript 替换一个对象';s属性与另一个属性的属性?

Javascript 替换一个对象';s属性与另一个属性的属性?,javascript,clone,Javascript,Clone,首先,我不是说从一个对象到另一个对象的深度克隆 我有一个目标: var data1 = { p1: values1, p2: values2, ..... }; value1和value2可以是任何数据类型,如对象或数组 我还有一个目标: var data2 = { p3: values3, p4: values4,

首先,我不是说从一个对象到另一个对象的深度克隆

我有一个目标:

var data1 = {
               p1: values1,
               p2: values2,
               .....
            };
value1和value2可以是任何数据类型,如对象或数组

我还有一个目标:

var data2 = {
               p3: values3,
               p4: values4,
               .....
            };
value3和value4可以是任何数据类型,如对象或数组

现在我想将data2的所有属性克隆到data1

我希望这样做的原因是引用了data1,在更改data1的属性后,我不想中断引用

如果我做了类似的事情

 data1 = clone(data2)
我要打破这个参照系

更新: 打破引用意味着什么:

var data1 = {
             p1: value1
          }; 
var data2 = {
              p2: vale2
          };
var ref = data1;
如果我这样做:

data1 = clone(data2);  
现在ref仍然指向旧数据1,其值仍然为:

{
   p1: value1
}
但我希望ref是data2

试试:

extend(data1、data2)

使用
jQuery.extend()

对于深度副本:
var object=$.extend({},object1,object2)


更多信息

您可以使用此功能:

function replaceProperties(dest, src)  {
    for (var i in dest) 
        delete dest[i];
    for (var i in src) 
        dest[i] = src[i];
}
代码是显而易见的,似乎它做了你想要的。它不会像你说的那样“破坏引用”

虽然当属性不可枚举或来自原型时,它可能无法实现您想要的功能

如果您不必支持IE10和之前的版本,使用或,您可以在更改
src
属性时更新
dest

function replaceProperties(dest, src)  {
    for (var i in dest) 
        delete dest[i];
    Object.setPrototypeOf(dest, src);
}

不中断引用是什么意思?很抱歉,这是非常不同的。因此,您希望将所有
data2
的属性复制到
data1
,覆盖与
data1
同名的任何属性?在
循环中为..做一个简单的
不是很容易吗?@AlexanderO'Mara这不是那个问题的重复。@FaridNouriNeshat我明白你的意思了,在更新后,我改进了标题并指定了重新打开的问题。但是这会将data2的属性添加到data1中,不替换此操作将属性从两个对象复制到新对象。1.它将打破参考,2。它不会清除原始属性。