posts - 609,  comments - 13,  views - 64万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

浅拷贝:

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

1
2
3
4
5
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   邢帅杰  阅读(205)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示