`
jetway
  • 浏览: 485769 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JSON[JavaScript Object Notation]封装

阅读更多
大家好,今天要和大家讨论的是javascrīpt[以下简称js]封装,高手见笑了!其实js本身就是一个很好的封装!如:数学运算的Math 对象;日期操作的Date 对象;字符串操作的String 对象等等。但是在不同浏览器的执行,又给js提出了更高的要求!我们不得不对一些常用的东西进行封装,当然这仅仅是走出的第一步!这一步确是非常关键的,走好这一步也是非常不容易的!呵呵~当然要谈起这个封装话题,也是很不容易的!是不是应该使用类?那也是众说纷纭的,有说好,有说不好,乖乖~这个话题牵涉到各种编程语言的上上下下(菜鸟说:废话这么多!你不讲我讲好了!),算了,少说为妙!
OB(E1H g0第一,常规封装PHPChina 开源社区门户4`I&^6[k^.Ky4l
    要说说这个常规,不禁要提起js一般语法!ps:本部分适合菜鸟,高手可以直接跳到第二!
UEB3R(B"fpb8W0什么叫封装?
)Yi$J G2M;jG9q}t7Q&RE0    所谓"封装"即调用对象的用户不必了解实现特定功能的详细代码和过程, 只需懂得设置对象属性(即定义时被封装的变量), 调用其方法(即定义时被封装的函数)就可以了!PHPChina 开源社区门户n:g'|w-Z'y+dIu
    那么怎么去做一个对象呢?其实在js中对象的概念是非常泛化的!你可以把一个函数称之为对象,也可以把一个网页元素叫成一个对象,甚至把一个字符串叫做对象!怎么称呼使人感到困惑,如果一个一个都搞清,那是根本不可能的,也是没有必要的,能用就行~
$c+Xn_"PG.L5V u0    当人们停留在对信息显示要求的层面上时,js是一种点缀作用,使用的方面十分少!于是渐渐的从人们的视野里淡化了,或许这就是传说中的web1.0时代吧!如今web2.0把网页设计带入了一个新的阶段,js以其ajax技术重出江湖!同时配合流行的phpmysql简直就是web开发的无敌利器,并且时时给我们带来惊喜!PHPChina 开源社区门户Bi_4H(\F
先来看看怎么写类吧!PHPChina 开源社区门户%{E"~ G:{vds
//----------------------------------------------------------------PHPChina 开源社区门户^*Bx%E&MF.iB
// pasta 是有四个参数的构造器。PHPChina 开源社区门户R Ot\C
function pasta(grain, width, shape, hasEgg)
W$Q4K:sE q#S.t!a0{
`6[z#@ r?[5V0    // 是用什么粮食做的?PHPChina 开源社区门户4S8J z(v w:L
    this.grain = grain;
WCuI sz8b }d0    // 多宽?(数值)
7D M$iVMon0    this.width = width;    
4[T}Q1p.B {S0G+Z?^0    // 横截面形状?(字符串)PHPChina 开源社区门户'gF f"X~e"h4]
    this.shape = shape;   PHPChina 开源社区门户f i S4T4g-y|
// 是否加蛋黄?(boolean)
(Cm3Eu,F}?t1FH0    this.hasEgg = hasEgg; 
XOvP b"F8U*XGuN0}
Rm9|d6@0//----------------------------------------------------------------
,~ _D} ]F0    从形式上看它是一个函数,其实它却是有血有肉的类!注意它有4个属性:grain,width,shape,hasEgg!在我的理解中,类(也可以称为构造器)就像你的一个小屋子,里面随便你怎么搞:你可以在墙上贴的到处是你的偶像,也可以贴的到处是报纸......那是自由的,也是个性的,或许这是为什么很多人选择用类写程序的原因吧!
:G&}0|y'KE~n0很多人说:我见到别人是这么写的!PHPChina 开源社区门户1Z6Xx{D*`
//----------------------------------------------------------------PHPChina 开源社区门户.@;E3x(IIyp
// pasta 是有四个参数的构造器。
B"OR l0S0pasta=function(grain, width, shape, hasEgg)
&u L$h M-y:_4\,m#z f0{PHPChina 开源社区门户.E%q7M+?6}-P/\ Ss+G d!{{
    // 是用什么粮食做的?PHPChina 开源社区门户n1U'v d4X[kh/Gpy
    this.grain = grain;PHPChina 开源社区门户,W GLp B Tf;B
    // 多宽?(数值)PHPChina 开源社区门户B I{0L)cq4^r
    this.width = width;    
aEjD q/pM&~(Y5w0    // 横截面形状?(字符串)PHPChina 开源社区门户#I7OU ?B:{I#m5@
    this.shape = shape;   PHPChina 开源社区门户"A7Ti+eJ-J;M
    // 是否加蛋黄?(boolean)PHPChina 开源社区门户:C0FHF@Nw
    this.hasEgg = hasEgg; 
D yqWF0}
(kj O6Q,j0//----------------------------------------------------------------
4l*oK7?a0    其实这样的写法是换汤不换药,第一种是标准写法,第二种是当成一个变量来写!使用第二种写法可要注意了,因为引用类之前必须先声明!PHPChina 开源社区门户#o x7j)M;I;Nt3ao
怎样使用类呢?PHPChina 开源社区门户*M`4q+ZZ
    和其他语言一样,需要初始化一下,当然时下java和php5都支持静态引用了!呵呵~javascrīpt就别想了!当然也就是多写一步new就行了:
Eqh)N ~WO;G.y,g0//----------------------------------------------------------------
0p"\{9n/go0var testPasta=new pasta('rice','10','round',true);
#cH)~;VxYD*[0alert(testPasta.grain);PHPChina 开源社区门户:[!A;r*K@:_ij[ [
//----------------------------------------------------------------PHPChina 开源社区门户1A9~5|2y-dBac
    以上代码实现了对类pasta初始化成testPasta,同时引用了testPasta的grain属性。其实在javascrīpt的属性和方法是混为一坛,当然要看人怎么去理解了!!PHPChina 开源社区门户/Ug3Q @7?^ { `
第二,JSON封装
']!N T"a?7mA1P0    还是简单讲一下概念吧!PHPChina 开源社区门户Y\fC$st6G%x
JSON(Javascrīpt Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于Javascrīpt Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascrīpt, Perl, Python,php等)。这些特性使JSON成为理想的数据交换语言。 PHPChina 开源社区门户I:LR-\)^Z Xr
注意:上述定义是狭义的,广义上JSON是所有形如{......}的写法!PHPChina 开源社区门户:H2MR7b,s-t4c6z
说到数据交换,那我们先来看看传统的数据交换xml吧!
df6N|9hE!Pk-o0<!--       xml start       -->
:b*G3KjJ3T-b$E!G0<items>
3?3go%| G6N;Y0 <item>PHPChina 开源社区门户N PVS Y i5`;W
  <id>1</id>
7ml3^-`kHy$JX0  <author>h058</author>
S Ldu+\0  <url>http://www.allyes.com</url>PHPChina 开源社区门户oE'E*S(Nd9i
  <content>Welcome to allyes.com</content>PHPChina 开源社区门户h7L+X V/x3tN8q
 </item>PHPChina 开源社区门户(e#WJ{-E U+~$V
 <item>PHPChina 开源社区门户A!b }`3y:Jv7GzV
  <id>2</id>
S} D4B^K0  <author>fly</author>
+u[8?,NA!i0  <url>http://www.fly.cn</url>PHPChina 开源社区门户@K2nwqU+f
  <content>Welcome to fly.cn</content>PHPChina 开源社区门户B$G$whPz BD:a
 </item>PHPChina 开源社区门户~^Z@n2r
</items>
7cH%e9^_`pt"E D0<!--       xml end         -->PHPChina 开源社区门户 ~'L b6zn `
上述代码实现了数据文件xml的传递
8_.bJ#R9I0z'O0同时再来看看JSON怎么写:
UNPEY:O0//----------------------------------------------------------------
` ~$BMU:k-r0{items:[
Zp(sf RO#K0 {
#hJ#_QE*e#H/@2`0  id:1,
d4e.e mm_3n9r)W~0  author:\"h058\",
w8vri zu$ajz0  url:\"http://www.allyes.com\",PHPChina 开源社区门户7P5dJ9L)So
  content:\"Welcome to allyes.com\"PHPChina 开源社区门户)vL"E V AQ'z$R
 },PHPChina 开源社区门户W8I7sjmy ckx)r
 {PHPChina 开源社区门户6Qg3n1d/^5\0z`
  id:2,PHPChina 开源社区门户%[Z G+A W/ij2e
  author:\"fly\",PHPChina 开源社区门户8V krEB(x,^
  url:\"http://www.fly.cn\",PHPChina 开源社区门户,P3H%l{j"l&R.e(i(\
  content:\"Welcome to fly.cn\"
T'D Eu+dZ^0 }PHPChina 开源社区门户A5n0c3i,kS |]%q
]};
(q.KJ:N+@0//----------------------------------------------------------------
4a9m%}2mXbhQS6d0    比较这两种写法:JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于js来说非常容易使用,可以方便的通过遍历数组以及访问对象属性来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。PHPChina 开源社区门户7wbr;w[r[
    JSON能完全取代XML吗?当然不能,原因就在于XML的优势:通用性。要使服务器端产生语法合格的Javascrīpt代码并不是很容易做到的,这主要发生在比较庞大的系统,服务器端和客户端有不同的开发人员。它们必须协商对象的格式,这很容易造成错误。
jCOpfb `0撇开数据交换,对象封装时我们也使用JSON:
2R5R#LP$k~#|7W0//----------------------------------------------------------------
u s ~V']3[{1m0    * JSON is easy. No really. It’s so easy, it’ll make you sick.PHPChina 开源社区门户-{6iZ3\9D[A
    * If you’re familiar with writing classes in PHP, then you’ll most definitely be comfortable with writing Javascrīpt in Object NotationPHPChina 开源社区门户9^5vv-xi$m
    * JSON is nothing more than name : value pairs assigned within an object.
@Uxqiv'Z d0    * JSON is easy to understand because if written well, it’s a self-documenting structure.PHPChina 开源社区门户Uw8x"]V f^
    * JSON is fast!PHPChina 开源社区门户A?Z4[O&Fi6gS E Q
    * JSON organizes the ugly mess of procedural programming. Imagine having more than one init function.
(?"x#AR4\9dL0    * You can impress your friends with JSON because it’s pretty lookingPHPChina 开源社区门户Zt%L*b_
    * Your co-workers will love you for writing in JSON because it will most likely not conflict with their scrīpts that are being called within the same web documents.
Ql@ tB9n-Z a0//----------------------------------------------------------------
K%u J8V$@`0这些是从国外的一个网站上摘录的!简单翻译一下:
!H#V)S_6\0//----------------------------------------------------------------
rl |^+Bx,R'{2g0    * JSON 很简单!甚至简单的让人困惑!
sQ*@y$W J1g0    * 如果他在php写作时非常喜欢用类,那么他也会很自然和习惯使用js中的对象!PHPChina 开源社区门户H(Ge)X;e$@1sjZC
    * JSON 就是在对象中使用名称:值PHPChina 开源社区门户9JIi3z/]*w3NF
    * JSON 是一种结构化的写法,所以是非常容易理解的。PHPChina 开源社区门户KHM:QI/o
    * JSON 是快速的!PHPChina 开源社区门户u"P9g \L d
    * JSON 有效的把所有繁杂的东西整合起来了
/F-DzKZ)qu0    * 因为JSON看起来非常美观,这样的代码会使你的朋友印象深刻!
8d+E%S&r CO5p8I0    * 他的同事也会欣然接受你的代码,因为你的代码命名不会和她们的冲突PHPChina 开源社区门户Un%AYv_
//----------------------------------------------------------------
5x1I$qk.},D-@B;SL0    这就像以前我下定决心学习php一样,为了这些优点,我义不容辞,毫不犹豫的接受,更活灵活现的使用!PHPChina 开源社区门户nC@*P f8Q4k)x:F
如果这些还不能吸引你使用JSON,好,我们就来看看优秀代码的封装!
C eY6g6U tU Kl.jB0第一分析:Sam Stephenson 的作品:prototype
_{my#A/l3h0你可以看到
_,N'~"Ty h y0//----------------------------------------------------------------
8lY(P"l9e@@:\~'aW1~0var Prototype = {PHPChina 开源社区门户\$HS H#X+Uc$`
  Version: '1.4.0',PHPChina 开源社区门户 C X!\H_6D
  scrīptFragment: '(?:<scrīpt.*?>)((\n|\r|.)*?)(?:<\/scrīpt>)',PHPChina 开源社区门户6}+X3~1|$j1dNB
  emptyFunction: function() {},PHPChina 开源社区门户9b*t5ZG/Q R
  K: function(x) {return x}PHPChina 开源社区门户9U pw4]A0|OY W3]
}
!b5I!}*V bm0//----------------------------------------------------------------
R%DX7K ce2}s ~0这就是一个JSON简单封装!PHPChina 开源社区门户$?2]0jz)c L9R#].J!J}
第二分析: Thomas Fuchs的scrīpt.aculo.us
:N'o}.VRC0//----------------------------------------------------------------PHPChina 开源社区门户w)]h'_4Qp9c
var scrīptaculous = {
-[3]*C(f n^#l0  Version: '1.6.4',PHPChina 开源社区门户{9C#JcaC }1j
  require: function(libraryName) {PHPChina 开源社区门户:H-e;kD:dc
document.write('<scrīpt
k%~&x{`R|0type="text/javascrīpt" src="'+libraryName+'"></scrīpt>');PHPChina 开源社区门户| NC1\E fH$y
  },PHPChina 开源社区门户7iYu1m.t;H
  load: function() {PHPChina 开源社区门户\(I{6KqJ&d
......//本部分省略PHPChina 开源社区门户;|,s O_.Wn?-q
  }PHPChina 开源社区门户_J3ll/?1o
}PHPChina 开源社区门户5o B7J'S*TA {$Q ~U
//----------------------------------------------------------------
{QX/Y]^ E+L0从这个类看并没有什么特殊的地方,只是比第一分析的JSON稍微复杂一点
l?{$jjXI pm0第三分析:yahoo的GUI类库PHPChina 开源社区门户@2lzl6wrpXw,@'@ h
//----------------------------------------------------------------
S8X$p"j!@&n$} lL0if (typeof YAHOO == "undefined") {
,in} D$`h&pD0    YAHOO = {};
6N.~3x g d b0}PHPChina 开源社区门户F_Jl|
YAHOO.namespace = function(ns) {
*r&hK%m'_4B\0    if (!ns || !ns.length) {PHPChina 开源社区门户k5I/e*BWe
        return null;
8c2Cq#X[0    }
)d-y$oxA0    var levels = ns.split(".");
"\+Ix!x(FOZ0    var nsobj = YAHOO;
b&oho'A(\L0    for (var i=(levels[0] == "YAHOO") ? 1 : 0; i<levels.length; ++i) {
,z WD;h4q D/f0        nsobj[levels[i]] = nsobj[levels[i]] || {};
r?'wSA*d0        nsobj = nsobj[levels[i]];PHPChina 开源社区门户)Jv|G9C0Z
    }
t}P``6O(T$LS#g0    return nsobj;PHPChina 开源社区门户 o#j+w*A7l a)I y0V7l T
}PHPChina 开源社区门户6}8`PG+bl-]%C8I~/n
//----------------------------------------------------------------
:O/u z oP}!vdT0这个类就是比较隐形的,看看 YAHOO = {}吧,已经申明了JSON!PHPChina 开源社区门户m?B L5g
    菜鸟说:我还以为什么呢?不就是无类型对象的写法吗?呵呵~在一定程度上可以这么理解!说起来很简单,能不能灵活运用就要看个人的编程习惯了!同时,我觉得JSON也是有弱点的,这样的对象是一执行就会被定义了,这在一定程度上占用了一部分内存,所以像JSON这样的静态对象要考虑是否有必要!当然这么点影响对于现在的电脑配置是可以忽略的了!关于js的优化问题是很小却很杂的东西,要求太多的技巧!希望下次有机会和大家一起研究js的优化!
KC9brD_0好了,关于对象的封装问题就说到这里!只是稍微点了一下,如果说要完全说清楚是不可能的,也是没必要的,因为现在网上有一大堆的资料正等着你去翻阅呢!希望这篇拙作可以给大家带来一点点收益!PHPChina 开源社区门户FI/s2zDt}
分享到:
评论

相关推荐

    Oracle Json常用方法封装

    在Oracle数据库中,JSON(JavaScript Object Notation)已经成为处理复杂数据结构的重要工具,尤其是在Web服务和数据交换场景中。Oracle提供了强大的JSON支持,包括JSON数据类型、函数和过程,使得在PL/SQL环境中...

    C实现对JSON的封装,对json格式解析,封装等.

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务与客户端之间的数据传输。在C语言环境中,处理JSON数据通常需要通过库来实现,其中一个常用的C库就是`cJSON`。本篇文章将详细介绍...

    json解析和封装案例

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它基于JavaScript的一个子集,设计简洁且易于人阅读和编写,同时也易于机器解析和生成。在这个“json解析和...

    C#封装和解析json

    在C#编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在客户端和服务器之间传输数据。本教程将详细介绍如何在C#中进行JSON的封装和解析,以帮助开发者更好地理解和应用这些技术。 ...

    Android JSON数据的封装及解析

    在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据通信。本教程将深入讲解如何在Android中对JSON数据进行封装和...

    封装后的C++读取json库

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个...

    使用json值的数组封装数据 html 源代码

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。JSON格式被广泛用于前后端数据交互,尤其是在Web开发中。...

    json_value20190219.zip_RapidJson 简单封装_json封装_rapidjson_rapidjson

    在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。RapidJson是C++的一个开源库,专为性能而设计,用于处理JSON数据。这个“json...

    Json的封装与解析demo

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以其简单、易读和易于编写的特性在Web服务和应用程序之间广泛使用。本篇主要探讨JSON的封装与解析,帮助你理解并掌握这一关键技能。 一、JSON的...

    QT纯C++实现JSON的封装、解析、修改、删除!

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的数据传输。QT是一个跨平台的C++库,提供了丰富的功能,包括图形用户界面、网络通信、多媒体处理等。...

    json封装的jar包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它以文本形式存储和传输数据,易于人阅读和编写,同时也容易让机器解析和生成。JSON格式与JavaScript语法紧密...

    在JAVA中封装JSON数据

    在Java中封装JSON数据是一项常见的任务,特别是在开发Web应用程序时,JSON(JavaScript Object Notation)因其轻量级、易于阅读和编写的特点,被广泛用于数据交换。本篇将深入探讨如何在Java中处理JSON数据,结合`...

    Android 实用的数据json数据解析封装类

    在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据传输。对于Android开发者来说,理解和熟练掌握JSON解析至关重要...

    json数据封装,传递,解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于客户端和服务器之间的数据交互。它基于JavaScript的一个子集,设计简单易读,同时也易于机器解析和生成。在这个主题中,我们将深入探讨...

    使用json封装数据 html源代码

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以其简洁、易读、易于解析的特点被广泛应用于Web服务和客户端之间的数据交互。JSON是基于JavaScript的一个子集,但它是独立于语言的...

    封装了qt的json操作类QtSharpJson.zip

    在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。Qt是一个跨平台的C++库,为开发桌面、移动以及嵌入式应用提供了丰富的功能。...

    json.zip_Cjson源码 封装拓展_JSON_cjson_json封装

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务与客户端之间的数据传输。在C语言环境中,我们通常会使用第三方库来处理JSON格式的数据,Cjson便是其中的一个优秀选择。Cjson库由...

    JSON的封装和解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。它的设计目标是人可读性高且易于编写,同时也方便机器解析和生成。JSON格式基于JavaScript的一个子集...

    实现c#封装Json

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的数据传输。在C#中,处理JSON通常会用到第三方库,其中Json.NET是最常用且功能强大的库之一。本文将...

    c#json封装和解析练习例子

    在C#编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于人阅读和编写,同时也易于机器解析和生成。在处理Web服务或与服务器进行数据交换时,JSON常被用作数据传输的载体。本练习例子...

Global site tag (gtag.js) - Google Analytics