貌似我博客还有另外两个类似的函数,不过年代比较久远了,随着我技术的提高,更好的函数被创造出来。突然问起我以前的函数,我也会愣一下,心想,真烂!我总是喜欢把最好的东西分享给大家的,以前的大家忘掉吧。
我们先看一下浅复制的缺陷,不知多少人中过招呢?
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^)/
本文深入解析JavaScript中浅拷贝的缺陷,并提供一种改进方法:深拷贝,以解决对象内部属性引用导致的数据同步问题。同时,推荐访问新浪APP获取更多空间资源和技术支持。
684

被折叠的 条评论
为什么被折叠?



