对象的拷贝(clone)(深拷贝和浅拷贝)

2018-11-10  本文已影响0人  箩篼
    function Person(name, age, dog) {
        this.name = name;
        this.age = age;
        this.say = function () {
            console.log(this.name, this.age);
        };
        this.dog = dog;
    }
    // var p1 = new Person("lnj", 13, {
    //     name: "wc",
    //     age: "3"
    // });
    var p1 = new Person("lnj", 13,{
        name: "wc",
        age: "3"
    });
    /*
    //若传入的是数组也一样,数组也是对象
      var p1 = new Person("lnj", 13,[1,3,5]);
     */
    var p2 = new Person();

    function deepCopy(o1, o2){
        // 取出第一个对象的每一个属性
        for(var key in o1){
            // 取出第一个对象当前属性对应的值
            var item = o1[key]; // dog
            // 判断当前的值是否是引用类型
            // 如果是引用类型, 我们就重新开辟一块存储空间
            if(item instanceof Object){
                var temp = new Object();
                /*
                {name: "wc",age: "3"}
                 */
               deepCopy(item, temp);   //递归
                o2[key] = temp;
            }else{
                // 基本数据类型
                o2[key] = o1[key];
            }
        }
    }

    deepCopy(p1, p2);
    console.log(p1.dog.name); // wc
    p2.dog.name = "mm";
    console.log(p1.dog.name); // wc

    /*
    deepCopy(p1, p2);
    console.log(p1.dog); // wc
    p2.dog = [2,4,6];
    console.log(p2);
    console.log(p1.dog); // wc
     */
上一篇 下一篇

猜你喜欢

热点阅读