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 导出数据到Excel(处理table中的元素)
Dec 18 Javascript
JavaScript对象、属性、事件手册集合方便查询
Jul 04 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
Dec 31 Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
JS之相等操作符详解
Sep 13 Javascript
浅谈javascript中的三种弹窗
Oct 21 Javascript
koa-passport实现本地验证的方法示例
Feb 20 Javascript
vscode中Vue别名路径提示的实现
Jul 31 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
Java 生成随机字符的示例代码
Jan 13 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
我的论坛源代码(二)
2006/10/09 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
PHP多进程编程实例详解
2017/07/19 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
jquery中each方法示例和常用选择器
2014/07/08 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python内置函数property()如何使用
2020/09/01 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
酒店总经理工作职责
2013/12/13 职场文书
结婚喜宴主持词
2014/03/14 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
活动总结模板大全
2015/05/11 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
mysql脏页是什么
2021/07/26 MySQL