在Javascript中,所有的对象变量都分配给地址,有些学生可能会问对象对象是什么:

复制代码代码如下所示:

Typeof(真正的) / /布尔

Typeof(1) / /

Typeof(1) / /字符串

Typeof({ }) / /对象

Typeof({ }) / /对象

Typeof(空) / /对象

Typeof(function(){ }) / / 功能



所以事实上,我们有一个深拷贝的主要对象是对象对象,非对象对象只要直接正常赋值就好了:

遍历对象的所有属性,

如果此属性为对象

如果对象对象是特殊的,那么它是一个数组,然后创建一个新数组并深入复制数组中的元素。

如果对象对象是非数组对象,则递归地调用深层复制方法。

如果不是对象

以下是我的认识:

复制代码代码如下所示:

(object.prototype.deepcopy =功能){

Var obj,我;

obj = { };

对于(ATTR本){

如果(this.hasownproperty(ATTR)){

如果(typeof(这{属性})=对象){

如果(这{属性} = null){

obj {属性} = null;

}

如果(Object.prototype.toString.call(这{属性})={ }对象数组){

obj {属性} = { };

为(i = 0;i <这{属性}。长度;i++){

obj {属性}。推(这{属性} {我}。DeepCopy());

}

{人}

obj { } = {属性}这吸引了DeepCopy();

}

{人}

obj { } = {属性}这个属性;

}

}

}

返回对象;

};



如果浏览器支持ECMAscript 5,为了复制对象属性的所有属性,你可以使用它

复制代码代码如下所示:

object.defineproperty(对象,属性,Object.getOwnPropertyDescriptor(这个,ATTR));



更换

复制代码代码如下所示:

obj { } = {属性}这个属性;



实施这一方法直接对Object.prototype的优势是,所有对象继承的方法。糟糕的是,一些图书馆还重写的对象的对象,所以有时会发生冲突,这是要注意的。具体的使用方法如下:

复制代码代码如下所示:

object.prototype.deepcopy =函数(){…}

var = x:1 };

var;

var c = a.deepcopy();

内= 2;

b.x = 3;

console.log(内); / / 3

console.log(b.x); / / 3

console.log(C.X); / / 1



以上是关于深拷贝的解释,但是今天,既然我们已经谈到了深层复制,我们希望有浅拷贝,所以让我们简要地总结它们之间的异同。

浅拷贝(阴影克隆):只有复制对象的基本类型,对象类型,仍然属于原始引用。

深层复制(深层克隆):复制对象的基本类并不严格,而且复制原始对象中的对象。也就是说,新对象是完全生成的。