javascript深拷贝

本文深入解析JavaScript中浅拷贝的缺陷,并提供一种改进方法:深拷贝,以解决对象内部属性引用导致的数据同步问题。同时,推荐访问新浪APP获取更多空间资源和技术支持。

貌似我博客还有另外两个类似的函数,不过年代比较久远了,随着我技术的提高,更好的函数被创造出来。突然问起我以前的函数,我也会愣一下,心想,真烂!我总是喜欢把最好的东西分享给大家的,以前的大家忘掉吧。

我们先看一下浅复制的缺陷,不知多少人中过招呢?

var ooriginal = {

memnum: 1,// number

memstr: "i am a string",// string

memobj: {

test1: "old value"// we’ll test

},

memarr: [// array

"a string",// string member of array

{// object member of array

test2: "try changing me"// we'll test

}

]

};

这是一个比较复杂的对象,对象包含着对象与数组。我们用prototype著名的继承函数复杂一下。它那个东东实在很难说是继承,jquery的也不算。

var extend = function(result, source) {

for (var key in source)

result[key] = source[key];

return result;

}

测试程序:

var ocopy = extend({},ooriginal);// 浅拷贝

ocopy.memobj.test1 = "new value";// 出现问题了,会反射到原对象上

alert(ooriginal.memobj.test1);// 结果副本与原本都一同被修改了

ocopy.memarr[1].test2 = "i am changed";

alert(ooriginal.memarr[1].test2);// 同样中招了

javascript 深拷贝 by 司徒正美

运行代码


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值