浏览 7087 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-14
最后修改:2010-07-19
其实深拷贝一个JS对象方法十分简单,只需要两部 1.首先将JS对象序列化为JSON格式 2.然后再将JSON转化为JS对象。
//任意一个复杂的JS对象 var obj = [1,23,4,{name:'名字',value:"数值"}]; //将这个JS对象序列化为一个JSON字符串 var json = JSON.encode(obj) //将JSON字符串解析成一个新的JS对象 var newObj JSON.decode(json ) 序列化JSON的方法参照 http://relucent.iteye.com/admin/blogs/646016
如果使用的是ExtJs库,那就是
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-07-16
整来整去,效率呢?
|
|
返回顶楼 | |
发表时间:2010-07-16
呵呵, 这样也是有问题的. 最初我也这样做的, 但是对日期类型的数据就不行, 转来转去日期类型就变成字符串了, JSON 规范中没有对日期的定义确实是一件憾事.
最后只有自己重新写了一个深拷贝的功能. |
|
返回顶楼 | |
发表时间:2010-07-19
function clone(para){
var rePara = null; var type = Object.prototype.toString.call(para); if(type.indexOf("Object") > -1){ rePara = {}; for(var key in para){ if(para.hasOwnProperty(key)){ rePara[key] = clone(para[key]); } } }else if(type.indexOf("Array") > 0){ rePara = []; for(var i=0;i<para.length;i++){ rePara[rePara.length] = clone(para[i]); } }else{ rePara = para; } return rePara; } 这个也凑合,临时用用够了 |
|
返回顶楼 | |
发表时间:2010-07-19
最后修改:2010-07-19
glassprogrammer 写道 呵呵, 这样也是有问题的. 最初我也这样做的, 但是对日期类型的数据就不行, 转来转去日期类型就变成字符串了, JSON 规范中没有对日期的定义确实是一件憾事.
最后只有自己重新写了一个深拷贝的功能. 可以在转换JSON的时候将日期可以转成"new Date(12210301)" 的这种格式。 当然,重写一个深拷贝也是一个好方法。 smiky 写道 整来整去,效率呢?
这只是一个思路,其实这种序列化反序列化的效率的确不是很高(相对而言),不过值得庆幸的是,这个操作在客户端完成的。而且我们也太可能用JS去处理大型数据,所以这个可以不用太担心。 当然楼上那个效率相对比较高一些,一般应用也足够使用了。 |
|
返回顶楼 | |