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 ajax执行后台方法
Mar 18 Javascript
Jquery常用技巧收集整理篇
Nov 14 Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 Javascript
利用JavaScript检测CPU使用率自己写的
Mar 22 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 Javascript
JS实现“隐藏与显示”功能(多种方法)
Nov 24 Javascript
jquery uploadify隐藏上传进度的实现方法
Feb 06 Javascript
js异步上传多张图片插件的使用方法
Oct 22 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
Dec 10 jQuery
vue+iview分页组件的封装
Nov 17 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
PHP数字格式化
2006/12/06 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
Python操作串口的方法
2015/06/17 Python
python开发之文件操作用法实例
2015/11/13 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python如何在循环引用中管理内存
2018/03/20 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
python 回溯法模板详解
2020/02/26 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
装修五一活动策划案
2014/01/23 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
2015年团支部工作总结
2015/04/03 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
公司晚会主持词
2019/04/17 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python