深拷贝的三种方式

  • JSON方法
    var obj2 =JSON.parse(JSON.stringify(obj1))//深拷贝
  • 递归(自己调用自己)方法 判断第一层属性的类型,多层拷贝对象的属性
    var obj1 = {
    name: 'zs',
    age: 18,
    dog: {
    name: '金毛',
    age: 2
    },
    friends: ['ww', 'lil']
    }
    var obj2 = {};
    function deepCopy(o1, o2) {
    for (var k in o1) {
    //如果第一层中的属性是数组复杂类型
    if (o1[k] instanceof Array) {
    o2[k] =[];//如果o1[k]是数组,那就给o2[k]也准备一个数组存放拷贝过来的内容
    deepCopy(o1[k], o2[k]);
    }
    //如果第一层中的属性是object复杂类型
    else if (o1[k] instanceof Object) {
    o2[k]={};
    deepCopy(o1[k], o2[k]);
    } else {
    o2[k] = o1[k];
    }
    }
    }
    deepCopy(obj1, obj2);
    obj1.name = 'lisi';
    obj1.dog.name = '大黄';
    console.log(obj1);
    console.log(obj2);

  • Object.created();
    // Object.create()具体使用方法
    var obj = {name:'lisi'};
    var newObj = Object.create(obj);
    //newObj的原型(proto)指向obj,具备了obj的属性和方法

猜你喜欢

转载自www.cnblogs.com/zcsmile/p/10969287.html