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

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

我们都知道 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;
}
相关文章
|
21天前
|
机器学习/深度学习 自然语言处理 知识图谱
第6章:知识建模:概述、方法、实例
第6章:知识建模:概述、方法、实例
第6章:知识建模:概述、方法、实例
|
9月前
|
安全 编译器 C语言
new出对象“原理的深层解密
new出对象“原理的深层解密
41 0
关于图和实例的学习之相关概念个人理解
关于图和实例的学习之相关概念个人理解
91 0
关于图和实例的学习之相关概念个人理解
|
机器学习/深度学习
卷积神经网络中的参数共享/权重复制
卷积神经网络中的参数共享/权重复制
338 0
卷积神经网络中的参数共享/权重复制
|
PHP 开发者
对象克隆|学习笔记
快速学习对象克隆
88 0
对象克隆|学习笔记
|
机器学习/深度学习
神经网络的初始化方法总结 | 又名“如何选择合适的初始化方法” ​
本文介绍了为什么初始化很重要,总结了常用的几种初始化方法:全零或等值初始化、正态初始化、均匀初始化、Xavier初始化、He初始化和Pre-trained初始化,并介绍了几个还活跃的初始化方向:数据相关初始化、稀疏权重矩阵和随机正交矩阵初始化。
神经网络的初始化方法总结 | 又名“如何选择合适的初始化方法”  ​
|
机器学习/深度学习 存储 编解码
单阶段实例分割综述
本文比较全面地介绍了实例分割在单阶段方法上的进展,根据基于局部掩码、基于全局掩码和按照位置分割这三个类别,分析了相关19篇论文的研究情况,并介绍了它们的优缺点。
单阶段实例分割综述
133. 克隆图
133. 克隆图
76 0
133. 克隆图
|
设计模式 安全 Java
java 设计模式实战,原始模型模式之写作业,克隆以后就是新的
通过给出一个原型对象指明所要创建的对象的类型,然后通过复制这个原型对象来获取的更多的同类型的对象。 这让我不由自主的想起克隆技术,还记得克隆羊吗?
java 设计模式实战,原始模型模式之写作业,克隆以后就是新的
|
Java 开发者
对象克隆|学习笔记
快速学习对象克隆

热门文章

最新文章