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 相关文章推荐
JS获得选取checkbox整行数据的方法
Jan 28 Javascript
jquery分割字符串的方法
Jun 24 Javascript
jQuery zTree加载树形菜单功能
Feb 25 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 Javascript
Javascript基础回顾之(一) 类型
Jan 31 Javascript
垃圾回收器的相关知识点总结
May 13 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
layer.open关闭父窗口 以及调用父页面的方法
Aug 17 Javascript
Vue CLI3中使用compass normalize的方法
May 30 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 Javascript
vue使用element-ui按需引入
May 20 Vue.js
让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 GBK→UTF-8编码转换
2007/05/24 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
Python中pygame安装方法图文详解
2015/11/11 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
python代码实现ID3决策树算法
2017/12/20 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
英国探险旅游专家:Explore
2018/12/20 全球购物
大学生学习自我评价
2014/01/13 职场文书
房地产营销策划方案
2014/02/08 职场文书
平安建设实施方案
2014/03/19 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
新郎新娘致辞
2015/07/31 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python