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 插件开发笔记整理
Jan 17 Javascript
JavaScript中继承用法实例分析
May 16 Javascript
JS中字符串trim()使用示例
May 26 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
JS实现JSON.stringify的实例代码讲解
Feb 07 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
解决浏览器会自动填充密码的问题
Apr 28 Javascript
详解用webpack2搭建angular2的项目
Jun 22 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
Mar 26 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
Jun 01 Javascript
js获取url页面id,也就是最后的数字文件名
Sep 25 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
新52大事件
2020/03/03 欧美动漫
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
基于javascript制作微博发布栏效果
2016/04/04 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
Python实现合并字典的方法
2015/07/07 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
预备党员思想汇报范文
2014/01/11 职场文书
初中生评语大全
2014/04/24 职场文书
我的祖国演讲稿
2014/05/04 职场文书
上海世博会口号
2014/06/19 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
市场营销工作计划书
2014/09/15 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
医德医风个人总结
2015/02/28 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
PyTorch中permute的使用方法
2022/04/26 Python