大家好,今天要和大家讨论的是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技术重出江湖!同时配合流行的
php+
mysql简直就是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 Notation
PHPChina 开源社区门户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 looking
PHPChina 开源社区门户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(JavaScript Object Notation)已经成为处理复杂数据结构的重要工具,尤其是在Web服务和数据交换场景中。Oracle提供了强大的JSON支持,包括JSON数据类型、函数和过程,使得在PL/SQL环境中...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务与客户端之间的数据传输。在C语言环境中,处理JSON数据通常需要通过库来实现,其中一个常用的C库就是`cJSON`。本篇文章将详细介绍...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它基于JavaScript的一个子集,设计简洁且易于人阅读和编写,同时也易于机器解析和生成。在这个“json解析和...
在C#编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在客户端和服务器之间传输数据。本教程将详细介绍如何在C#中进行JSON的封装和解析,以帮助开发者更好地理解和应用这些技术。 ...
在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据通信。本教程将深入讲解如何在Android中对JSON数据进行封装和...
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。JSON格式被广泛用于前后端数据交互,尤其是在Web开发中。...
在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。RapidJson是C++的一个开源库,专为性能而设计,用于处理JSON数据。这个“json...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以其简单、易读和易于编写的特性在Web服务和应用程序之间广泛使用。本篇主要探讨JSON的封装与解析,帮助你理解并掌握这一关键技能。 一、JSON的...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的数据传输。QT是一个跨平台的C++库,提供了丰富的功能,包括图形用户界面、网络通信、多媒体处理等。...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它以文本形式存储和传输数据,易于人阅读和编写,同时也容易让机器解析和生成。JSON格式与JavaScript语法紧密...
在Java中封装JSON数据是一项常见的任务,特别是在开发Web应用程序时,JSON(JavaScript Object Notation)因其轻量级、易于阅读和编写的特点,被广泛用于数据交换。本篇将深入探讨如何在Java中处理JSON数据,结合`...
在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据传输。对于Android开发者来说,理解和熟练掌握JSON解析至关重要...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于客户端和服务器之间的数据交互。它基于JavaScript的一个子集,设计简单易读,同时也易于机器解析和生成。在这个主题中,我们将深入探讨...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以其简洁、易读、易于解析的特点被广泛应用于Web服务和客户端之间的数据交互。JSON是基于JavaScript的一个子集,但它是独立于语言的...
在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。Qt是一个跨平台的C++库,为开发桌面、移动以及嵌入式应用提供了丰富的功能。...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务与客户端之间的数据传输。在C语言环境中,我们通常会使用第三方库来处理JSON格式的数据,Cjson便是其中的一个优秀选择。Cjson库由...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。它的设计目标是人可读性高且易于编写,同时也方便机器解析和生成。JSON格式基于JavaScript的一个子集...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的数据传输。在C#中,处理JSON通常会用到第三方库,其中Json.NET是最常用且功能强大的库之一。本文将...
在C#编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于人阅读和编写,同时也易于机器解析和生成。在处理Web服务或与服务器进行数据交换时,JSON常被用作数据传输的载体。本练习例子...