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 相关文章推荐
Javascript常用运算符(Operators)-javascript基础教程
Dec 14 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
Feb 03 Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
Aug 13 Javascript
js判断上传文件的类型和大小示例代码
Oct 18 Javascript
理解jQuery stop()方法
Nov 21 Javascript
HTML5实现留言和回复页面样式
Jul 22 Javascript
基于jQuery ligerUI实现分页样式
Sep 18 Javascript
详解JS中的this、apply、call、bind(经典面试题)
Sep 19 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 Javascript
深度了解vue.js中hooks的相关知识
Jun 14 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
基于Vuejs实现购物车功能
2016/08/02 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
python正则中最短匹配实现代码
2018/01/16 Python
python实现京东秒杀功能
2018/07/30 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Python实现ATM系统
2020/02/17 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
电厂厂长岗位职责
2014/01/02 职场文书
大学军训感言600字
2014/02/25 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
公司市场部岗位职责
2015/04/15 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android