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 Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
ExtJS4给Combobox设置列表中的默认值示例
May 02 Javascript
jquery制作属于自己的select自定义样式
Nov 23 Javascript
js自调用匿名函数的三种写法(推荐)
Aug 19 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
May 03 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
vue自定义tap指令及tap事件的实现
Sep 18 Javascript
javascript异步编程的六种方式总结
May 17 Javascript
深入浅出vue图片路径的实现
Sep 04 Javascript
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 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
十天学会php(2)
2006/10/09 PHP
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
总结js函数相关知识点
2018/02/27 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
使用Python生成url短链接的方法
2015/05/04 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
Python实现常见的回文字符串算法
2018/11/14 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
计算机专业优秀大学生自我总结
2014/01/21 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
道德模范事迹材料
2014/12/20 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL