首页 > 其他 > 详细

克隆与深度克隆

时间:2019-12-15 22:22:46      阅读:73      评论:0      收藏:0      [点我收藏+]

1.浅克隆

var lilei = {
sname: "lilei",
sage: 20,
intr() {
console.log(`我是${this.sname},今年${this.sage}`);
}
}
// lilei.intr()

function clone(obj) {
var newObj = {};
for (var key in obj) {
newObj[key] = obj[key];
}
return newObj;
}
var hmm = clone(lilei);
console.log(hmm);

 

2.深度克隆

function checkType(data) { // 用来判断被拷贝对象数据类型的函数
return Object.prototype.toString.call(data).slice(8, -1)
}
function deepClone(target) { // 实现深度拷贝的函数
var result, targetType = checkType(target);//Array Object
if (targetType === ‘Object‘) { // 只有对象和数组才进行深度拷贝
result = {}
} else if (targetType === ‘Array‘) {
result = []
} else {//如果return 证明target是基本数据类型,并且将整个函数结束了
return target
}
for (var i in target) { // i为对象的key或数组的下标
//获取属性名为i的属性值
var value = target[i]
// 检测当前属性的类型
var valueType = checkType(value);//String Number Array
if (valueType === ‘Object‘ || valueType === ‘Array‘) {
result[i] = deepClone(value) // 当拷贝的对象中还有数组或是对象时进行递归,克隆它们中的内容,直到递归完所有数组或对象为止
} else {
result[i] = value
}
}
return result // 返回最终的结果
}
var arr = [1,2,{username:"xiaohu"}]
var arr2 = deepClone(arr)
arr2[2].username = "dahu"
console.log(arr)
console.log(arr2)

克隆与深度克隆

原文:https://www.cnblogs.com/zhanghaifeng123/p/12046074.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!