经典对象克隆模型 深度克隆

简介: 经典对象克隆模型 深度克隆

我们都知道 JSON.parse(JSON.stringfy(obj)) 可以深度克隆一个对象,但是有一个缺陷,不能克隆代理对象


/**
 * 克隆的方法
 * @param obj
 * @returns {*}
 */
function clone(obj) {
    if (obj instanceof Array) {
        return cloneArray(obj);
    } else if (obj instanceof Object) {
        return cloneObj(obj)
    } else {
        return obj;
    }
}
/**
 * 克隆对象
 * @param obj
 * @returns {{}}
 */
function cloneObj(obj) {
    let res = {};
    // 获取对象里面的所有属性,包括对象里面的属性
    let objAttr = Object.getOwnPropertyNames(obj);
    for (let i = 0; i < objAttr.length; i++) {
        res[objAttr[i]] = clone(obj[objAttr[i]]);
    }
    return res;
}
/**
 * 克隆数组
 * @param array
 * @returns {[]}
 */
function cloneArray(array) {
    let arr = new Array(array.length);
    for (let i = 0; i < array.length; i++) {
        arr[i] = clone(array[i]);
    }
    return arr;
}
相关文章
|
4月前
|
数据安全/隐私保护 C++
|
4月前
|
存储 安全 编译器
|
6月前
|
JSON Java Apache
干货文:如何在 Java 中制作对象的深层副本
干货文:如何在 Java 中制作对象的深层副本
59 1
|
安全 编译器 C语言
new出对象“原理的深层解密
new出对象“原理的深层解密
69 0
关于图和实例的学习之相关概念个人理解
关于图和实例的学习之相关概念个人理解
118 0
关于图和实例的学习之相关概念个人理解
|
存储 C++
面向对象实验 ——(三)数据的保护与共享
面向对象实验 ——(三)数据的保护与共享
96 0
面向对象实验 ——(三)数据的保护与共享
|
PHP 开发者
对象克隆|学习笔记
快速学习对象克隆
对象克隆|学习笔记
|
设计模式 安全 Java
java 设计模式实战,原始模型模式之写作业,克隆以后就是新的
通过给出一个原型对象指明所要创建的对象的类型,然后通过复制这个原型对象来获取的更多的同类型的对象。 这让我不由自主的想起克隆技术,还记得克隆羊吗?
java 设计模式实战,原始模型模式之写作业,克隆以后就是新的
133. 克隆图
133. 克隆图
89 0
133. 克隆图
|
Java 开发者
对象克隆|学习笔记
快速学习对象克隆