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(一);
还有很多在上面的代码的问题,例如,内置对象的克隆人有一些问题,如数据库类型。
问题管理,这样的学习过程也是必要的。