Javascript中的克隆对象详细解决方案

在开发中,对象之间的引用关系被中断,只有下一个副本无处不在,克隆对象是不可避免的。

在Javascript中,最简单的方法是使用JSON对象的功能,stringify成字符串,然后解析到一个新的对象,或从互联网搜索的代码,并有大量的克隆代码在开源社区。

虽然代码是可以找到的,但是,东西总是别人的,动手学习永远是一门不变的学科。

我写了两个克隆的功能:

cloneown:克隆自定义自定义对象的属性,包括继承的属性。属性可以是基本数据类型和数组、自定义对象,并可以将属性名称列表克隆。

clonearray:克隆数组,该数组中的元素可以是基本类型的对象。

复制代码代码如下所示:

第一个参数是克隆的对象,第二个参数是需要克隆的属性列表。

功能cloneown(){

var obj =论点{ 0 };

如果(typeof obj'undefined'obj | | = = = = = = null)

返回{ };

如果(typeof obj!= 'object)

返回对象;

第二个参数是属性名称列表,其中有列表选择

否则,克隆的所有属性

var属性=论点{ 1 };

无功enable_spec_attr =真;

如果(!(属性是数组)){

/ / console.log(属性);

属性= obj;

enable_spec_attr = false;

}

var结果{ };

var i;

For (I in attrs) {

attr = enable_spec_attr attrs {我}:我;

/ / console.log(ATTR);

如果(obj.hasownproperty(ATTR)){

如果(obj {属性}是{数组)

结果{属性} = clonearray(obj {属性});

}

else if(typeof obj {属性} = 'object){

结果{属性} = cloneown(obj {属性});

{人}

结果{ } { } = obj attr属性;

}

}

}

返回结果;

}



复制代码代码如下所示:

克隆/数组

功能clonearray(阵列){

如果(typeof array'undefined'array | | = = = = = = null)

返回{ };

如果(!(数组是数组))

返回{ };

结果= { };

var i;

对于(我在数组中){

如果(typeof数组{我}!= 'object){

结果{数组} { };

继续;

}

克隆对象

结果{我} = cloneown(数组{我});

}

返回结果;

}



呼叫

1。常规克隆自定义对象:

复制代码代码如下所示:

var = {

名称:'frank,

年龄:20

};

var b = cloneown(一);



2。指定克隆的属性

复制代码代码如下所示:

var = {

名称:'frank,

年龄:20,

地址:任何地方

};

var b = cloneowne(,{ 'name',年龄' });



三.使用数组属性克隆自定义对象

复制代码代码如下所示:

var = {

名称:'kxh,

年龄:20岁,

书籍:{还,'ho ','ali},

喜欢:{

{ wname:'kaili,工资:81,最喜欢的:aaaaa},

{ wname:'seli,工资:82,最喜欢的:BBB},

{ wname:'ailun,工资:83,最喜欢的:CCC},}

};

var b = cloneowne(一);



4。包含定制对象的克隆数组

复制代码代码如下所示:

var = {

{

名称:'frank,

年龄:20

},

{

名称:'leon,

年龄:30

}

};

var b = clonearray(一);



还有很多在上面的代码的问题,例如,内置对象的克隆人有一些问题,如数据库类型。

问题管理,这样的学习过程也是必要的。