美文网首页
深度克隆对象

深度克隆对象

作者: sdcV | 来源:发表于2017-08-01 09:41 被阅读23次
克隆的概念
  • 浅度克隆:原始类型为值传递,对象类型仍为引用传递。

  • 深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。
    看一个浅克隆

    //浅克隆
    function clone(obj) {
        var result = {};
        for (key in obj) {
            result[key] = obj[key];
        }
        return result;
    }
    var Person = {
        name: "jack",
        age: "18",
        Address: {
            province: "beijing"
        },
    };
    var New = clone(Person);
    console.log(Person.Address.province); //beijing
    New.Address.province = "shanghai";
    console.log(Person.Address.province); //shanghai
    

在看一个深克隆

//深度克隆
function deepClone(obj) {
    var result, oClass = isClass(obj);

    if (oClass === 'Object') { //初始化result类型
        result = {};
    } else if (oClass === 'Array') {
        result = [];
    } else {
        return obj;
    }

    for (key in obj) {
        var copy = obj[key];
        if (isClass(copy) == 'Object') {
            result[key] = arguments.callee(copy);////递归调用
        } else if (isClass(copy) == 'Array') {
            result[key] = arguments.callee(copy);
        } else {
            result[key] = obj[key];
        }
    }
    return result;
}

function isClass(o) {//判断传入的类型
    if (o === null) return 'Null';
    if (o === undefined) return 'Undefined';
    return Object.prototype.toString.call(o).slice(8, -1);
}

var Person = {
    name: "jack",
    age: "18",
    Address: {
        province: "beijing"
    },
};
var New = deepClone(Person);
New.name = "tom";
New.Address.province = "shanghai";
console.log(Person.name); //jack
console.log(Person.Address.province); //beijing
console.log(New.name); //tom
console.log(New.Address.province); //shanghai

相关文章

  • JS实现深度克隆

    一、概念 深度克隆:深度克隆的新对象可以完全脱离原对象,我们对新对象的修改不会反映到原对象中 二、知识点储备: 1...

  • 深度克隆对象

    克隆的概念 浅度克隆:原始类型为值传递,对象类型仍为引用传递。 深度克隆:所有元素或属性均完全复制,与原对象完全脱...

  • 对象深度克隆

    是否遇到过这样的事情 let obj = {name: 'test',age: 1}_obj.age = 2con...

  • 原型模式

    定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象克隆(浅度克隆:拷贝值类型或者引用,深度克隆:...

  • 浅克隆与深克隆

    克隆的概念 浅度克隆:原始类型为值传递,对象类型仍为引用传递。深度克隆:所有元素或属性均完全复制,与原对象完全脱离...

  • js对象的克隆

    在工作中对对象的克隆在所难免,现在就总结一下克隆对象的方法。 浅克隆 深度克隆 其实除了以上的方法,还有一种非常简...

  • js对象深度克隆

    通用克隆方法 第一种方法简单粗暴,先将对象序列化再解析回来,不过要注意对象中如果有函数function则不能正确复...

  • 对象的深度克隆

    1、数据类型:* 数据分为基本的数据类型(String, Number, boolean, Null, Undef...

  • 对象的深度克隆

    首先了解js的数据类型。可以分为原始数据类型和对象类型数据。 原始数据类型指的是number、string、boo...

  • 深度克隆对象,自定义事件

    1. 深度克隆 1.1 一般对象的浅克隆 因为对象是引用类型,因此直接进行赋值赋给的是指向地址,所以使用克隆(拷贝...

网友评论

      本文标题:深度克隆对象

      本文链接:https://www.haomeiwen.com/subject/jsodlxtx.html