实现一个对象深拷贝函数cloneDeep()

tech2024-06-11  69

要求:

(1)对象属性可能是函数; (2)不需要拷贝原型链上的属性和方法;

直接上代码

//创建测试对象 let obj = { a: [1, { ss: "ss" }, [3], 4, 5, ["sad", "123", true]], age: 10, name: "老八", eat: "秘制小汉堡", show: { skill: "鸡你太美", b: function() { console.log(this.a); }, }, }; // 深拷贝 function cloneDeep(obj) { // 筛选,如果是引用数据类型则进入if if (Array.isArray(obj) || typeof obj === "object") { // 创建变量接受深拷贝数据,如果obj是数组,则变量初始化为数组 let cloneObj = Array.isArray(obj) ? [] : {}; // 将变量进行遍历 Object.keys(obj).forEach(function(key) { // 如果被拷贝对象为引用数据,则将递归后的数据放入对应的键内 if (Array.isArray(obj[key]) || typeof obj[key] === "object") { cloneObj[key] = cloneDeep(obj[key]); } else { //否则直接拷贝键值 cloneObj[key] = obj[key]; } }); // 然后返回拷贝后的对象 return cloneObj; } else { // 普通数据直接返回 return obj; } } let cloneObj = cloneDeep(obj); console.log(cloneObj); cloneObj.show.skill();

有问题请大家交流指正

最新回复(0)