JavsScript对象的克隆

Posted splendid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavsScript对象的克隆相关的知识,希望对你有一定的参考价值。

JS对象的数据类型分为两大类:原始类型(string, boolean, number,undefined, function)和 对象类型(array, object, null)。

1、浅度克隆

浅度克隆原始类型为值传递,对象类型为引用传递(即修改数组或对象值会同时修改另一个数组或对象相应的值)

function clone(origin, target) {
    var target = target || {};
    for (var prop in origin) {
        target[prop] = origin[prop];
    }
    return target;
}

2、深度克隆

所有数据类型均为复制,两个对象完全独立,修改其中一个对象值不会影响另一个。 

function deepClone(origin, target) {
    var target = target || {}; // 目标对象
        toStr = Object.prototype.toString, // 简化toString方法
        isArr = ‘[object Array]‘; // toString方法返回的数组类型
    
    for (var key in origin) { // 遍历原对象
        if (origin.hasOwnProperty(key)) { //判断是否是自身属性
            if (typeof(origin[key]) == ‘object‘ && origin[key] !== null) { // 是引用类型且不是null
                if (toStr.call(origin[key]) == isArr) { // 判断是否是数组
                    target[key] = []; // 数组
                } else { 
                    target[key] = {}; // 对象
                }
                deepClone(origin[key], target[key]); // 递归
            } else {
                target[key] = origin[key]; // 原始值或null
            }
        }
    }
    return target;
}

 

以上是关于JavsScript对象的克隆的主要内容,如果未能解决你的问题,请参考以下文章

Forge Viewer - 如何在场景中访问(或获取渲染/片段代理)克隆的网格?

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

JavsScript中DOM的基本操作

Instagram 克隆。单击按钮时,为啥我不能回到上一个片段?

如何在多个页面使用同一个HTML片段