浅拷贝:

只针对当前对象的属性进行拷贝,若当前对象的属性是引用类型时,这个不考虑,不进行拷贝。
若属性是引用类型,拷贝后引用的是地址,如果进行更改,会影响拷贝的原对象属性。

var newObj = {}
for(var key in obj) {
	//key是当前属性名, obj[key]是当前属性值
	newObj[key] = obj[key]
}

  

深拷贝:
针对当前对象的数据的所有引用结构都拷贝一份,数据在内存中是独立的。
若属性是引用类型,如果进行更改,不会影响拷贝的原对象属性。

js使用扩展方法实现深拷贝

Object.prototype.DeepCopy = function () {
            // 1, 创建一个对象
            var temp = {};
            // 2, 拷贝属性, 判断如果是引用类型需要深拷贝
            for (var k in this) {
                if (typeof this[k] === 'object') {
                    temp[k] = this[k].DeepCopy();
                } else {
                    temp[k] = this[k];
                }
            }
            // 3, 返回对象
            return temp;
        };

 测试:

var arr = [{ name: "j1" }, { name: "j2" }, { name: "j3" }];

            var arrtoo = arr.DeepCopy();
            arrtoo[1].name = "cccc";

            alert(arr[1].name);
            alert(arrtoo[1].name);

结果:j2  cccc

扩展方法:http://www.cnblogs.com/kissdodog/p/3386480.html

posted on 2017-06-22 18:02  邢帅杰  阅读(200)  评论(0编辑  收藏  举报