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中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 Javascript
JavaScript作用域链使用介绍
Aug 29 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
Dec 18 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
Oct 10 Javascript
AngularJS的ng Http Request与response格式转换方法
Nov 07 Javascript
详谈js模块化规范
Jul 07 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
vue cli webpack中使用sass的方法
Feb 24 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
React中获取数据的3种方法及优缺点
Feb 18 Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
jquery 问答知识整理
2010/02/11 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
selenium自动化测试入门实战
2020/12/21 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
幼师自荐信范文
2013/10/06 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
大学生就业意向书范文
2014/04/01 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
2014年关工委工作总结
2014/11/17 职场文书
岳庙导游词
2015/02/04 职场文书
保护校园环境倡议书
2015/04/28 职场文书
工商行政处罚决定书
2015/06/24 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
找规律教学反思
2016/02/23 职场文书
《迟到》教学反思
2016/02/24 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
基于Python实现射击小游戏的制作
2022/04/06 Python