JavaScript 序列化对象实现代码


Posted in Javascript onDecember 18, 2009

JavaScript 序列化对象实现代码
作者发的是一张图,大家可以放大看。

前些天说过关于JavaScript的Literal Syntax问题,觉得挺有意思的,于是又研究了一下,能不能把对象再转化为Literal形式呢?就像我们平时说的序列化和反序列化啥的。当然可以了,因为JavaScript对象自身都提供了一个toString()方法,默认就是返回简单对象的Literal形式。

我们需要作的就是判断对象的具体类型,然后分别Serialize每种对象,再输出为Object的Literal语法形式就行了。准确的判断对象类型,使用我曾经说过的__typeof__方法就行了,序列化对象实例的代码如下:

Object.prototype.Serialize = function() 
{ 
var type = __typeof__(this); 
switch(type) 
{ 
case 'Array' : 
{ 
var strArray = '['; 
for ( var i=0 ; i < this.length ; ++i ) 
{ 
var value = ''; 
if ( this[i] ) 
{ 
value = this[i].Serialize(); 
} 
strArray += value + ','; 
} 
if ( strArray.charAt(strArray.length-1) == ',' ) 
{ 
strArray = strArray.substr(0, strArray.length-1); 
} 
strArray += ']'; 
return strArray; 
} 
case 'Date' : 
{ 
return 'new Date(' + this.getTime() + ')'; 
} 
case 'Boolean' : 
case 'Function' : 
case 'Number' : 
case 'String' : 
{ 
return this.toString(); 
} 
default : 
{ 
var serialize = '{'; 
for ( var key in this ) 
{ 
if ( key == 'Serialize' ) continue; 
var subserialize = 'null'; 
if ( this[key] != undefined ) 
{ 
subserialize = this[key].Serialize(); 
} 
serialize += '\r\n' + key + ' : ' + subserialize + ','; 
} 
if ( serialize.charAt(serialize.length-1) == ',' ) 
{ 
serialize = serialize.substr(0, serialize.length-1); 
} 
serialize += '\r\n}'; 
return serialize; 
} 
} 
};

其实就是Array和Object的属性比较的麻烦,需要递归的做这个Serialize操作。不过需要注意,Serialize方法就不需要被序列化出来了。下面是测试示例,不过这个序列化方法没有对环状引用做检查,能序列化的对象很有限。
var obj1 = []; 
alert(obj1.Serialize()); var obj2 = [1,[2,[3,[4,[5,[6,[7,[8,[9,[0]]]]]]]]]]; 
alert(obj2.Serialize()); 
var obj3 = 
{ 
Properties1 : 1, Properties2 : '2', Properties3 : [3], 
Method1 : function(){ return this.Properties1 + this.Properties3[0];}, 
Method2 : function(){ return this.Preperties2; } 
}; 
alert(obj3.Serialize()); 
var obj4 = [null, 1, 'string', true, function(){return 'keke';}, new Object()]; 
alert(obj4.Serialize());

至于反序列化就非常的容易了,把上面的序列化结果用eval执行一下,就得到类实例了。
Javascript 相关文章推荐
强大的jquery插件jqeuryUI做网页对话框效果!简单
Apr 14 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
文本域中换行符的替换示例
Mar 04 Javascript
jquery实现鼠标滑过小图时显示大图的方法
Jan 14 Javascript
jquery 设置style:display的方法
Jan 29 Javascript
Jquery中CSS选择器用法分析
Feb 10 Javascript
详解使用fetch发送post请求时的参数处理
Apr 05 Javascript
jQuery替换节点元素的操作方法
Mar 18 jQuery
Vue动态控制input的disabled属性的方法
Jun 26 Javascript
通过扫小程序码实现网站登陆功能
Aug 22 Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 #Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
Dec 18 #Javascript
javascript 导出数据到Excel(处理table中的元素)
Dec 18 #Javascript
event.srcElement 用法笔记e.target
Dec 18 #Javascript
Javascript document.referrer判断访客来源网址
May 15 #Javascript
Javascript 中介者模式实例
Dec 16 #Javascript
js textarea自动增高并隐藏滚动条
Dec 16 #Javascript
You might like
YII模块实现绑定二级域名的方法
2014/07/09 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php动态绑定变量的用法
2015/06/16 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
javascript 事件绑定问题
2011/01/01 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
php 修改密码实现代码
2017/05/24 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
一百行JS代码实现一个校验工具
2019/04/30 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
python中遍历文件的3个方法
2014/09/02 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
一道python走迷宫算法题
2018/01/22 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
python中的itertools的使用详解
2020/01/13 Python
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
商务主管岗位职责
2013/12/08 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
朋友离别感言
2015/08/04 职场文书
体育教师教学随笔
2015/08/15 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers