function Animal(name,age,color){
this.name = name;
this.age = age;
this.color = color;
}
Animal.prototype.walking = function(){
console.log("it is walking");
}
var cat = new Animal("猫",6,"color");
console.log(cat);
var k = new Array();
k.push(2);
k.push(new Object());
k.push(cat);
console.log(k);
//写一个深拷贝
function deepClone(obj){
//首先判定是数组还是对象
var objClone = Array.isArray(obj)?[]:{};
//判断obj是否为空且为对象
if(obj && typeof obj === "object"){
//逐个考虑obj的属性
for(key in obj){
//obj本身是否有key这个属性(不包含原型对象(继承)来的)
//如果不加这个if,就是连带着原型对象里包含的属性一块继承。
if(obj.hasOwnProperty(key)){
if(obj[key] && typeof obj[key] === "object"){
//如果该属性值非空,并且还是对象,就递归调用深拷贝
objClone[key] = deepClone(obj[key]);
}else{
//如果已经到了可以直接拷贝的基本数据类型,就直接浅拷贝完事
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
var cat2 = deepClone(cat);
console.log(cat2);
var k2 = deepClone(k);
console.log(k);
JavaScript递归实现深拷贝
最新推荐文章于 2024-09-21 18:32:48 发布