目 录
目 录... 1
第一章 Ajax开发模式介绍与什么是Dojo. 3
一、 Web应用编程技术概述... 3
1. Web编程工具简介... 3
2. 使用Ajax开发Web应用... 4
a. 什么是Ajax?. 4
b. MVC与Ajax. 4
c. Ajax开发工具简介... 5
二、 什么是Dojo. 5
第二章 JavaScript语法简介... 6
第三章 Hello,Dojo! 6
一、 Hello,JavaScript! 6
二、 Hello,Dojo! 7
三、 Dojo开发步骤... 10
第四章 Dojo的结构体系... 10
一、 Dojo的包机制... 10
二、 Dojo的层次... 11
第五章 常用Dojo类库简介... 12
一、 语言工具类(lang.*) 12
1. common. 12
2. array. 14
3. assert 16
4. declare. 16
5. extras. 16
6. func. 16
7. Lang. 16
8. type. 16
9. repr 16
二、 集合类(collections.*) 16
1. Collections. 16
2. ArrayList 16
3. SortedList 17
4. SkipList 17
5. Queue. 17
6. Dictionary. 17
7. Stack. 17
8. Set 17
9. Graph. 17
三、 事件处理(event.*) 17
四、 用户界面包... 17
1. 拖放支持(dnd.*) 17
2. 动画支持(animation.*,lfx.*) 17
五、 URL与导航... 17
六、 远程通信(io.*,rpc.*) 17
七、 国际化支持... 17
八、 数据存储与查询... 17
九、 其他... 17
第六章 Dojo Widgets. 17
第七章 深入Dojo. 17
第八章 Web应用的整体考虑... 17
第九章 Dojo应用实例... 17
第一章 Ajax开发模式介绍与什么是Dojo
一、Web应用编程技术概述
1. Web编程工具简介
随着20世纪80年代互联网的崛起,基于Internet的编程技术也在飞速发展。迄今为止,Web应用作为最成功的技术,已经占据了互联网应用开发的绝大部分市场。Web最早是瑞士CERN研究中心的一组研究人员开发的,用于Internet上的信息交换。后来,Web技术被发现具有极大的发展潜力,人们遂致力于其开发并广为应用。
Web是一种C-S(客户机-服务器)结构的架构,使用HTTP(超文本传输协议)实现客户端(Client)与服务器端(Server)的连接。在服务器端,HTTP格式的信息被服务器程序(Server)获取并解析、处理,处理后的结果再以HTTP格式返回;在客户端,信息以HTML(超文本标记语言)呈现在Web浏览器中。
在Web编程语言的发展历史上,也有两条分支,一是以PHP、asp、jsp为代表的服务器端脚本语言,另一分支则是以JavaScript和VBScript为代表的客户端脚本语言。
在服务器端,近10年来涌现出了许多优秀的脚本语言,如PHP、ASP等,PHP是一种易于学习和使用的服务器端脚本语言,使用PHP,开发者可以很容易的进行数据库连接、文件访问等功能,PHP由开源组织PHP小组提供支持,用户可以免费下载并使用,新的版本PHP5已经发展成一门面向对象的编程语言,要构建一个中小型的网站,PHP是一个很好的选择。ASP是Microsoft公司开发的一种以Visual Basic语言为基础的脚本语言,ASP对同是Microsoft公司的VBScript提供了无缝的支持,不过ASP只对Microsoft的浏览器Internet Explorer提供支持,到目前为止,Microsoft已经发布了其.NET架构,.NET提供了ASP.NET,开发者可以很方便地使用Microsoft的Visual Studio.NET开发Web程序。此外,Sun MicroSystem公司的Java语言和J2EE架构为服务端提供了完整的方案,基于J2EE架构,还有许多开源的Web框架,如Apache的Struts、OpenSymphony的WebWork和SpringFrames的Spring。
在客户端,除了上述脚本语言动态生成HTML外,还有嵌入到HTML中的客户端脚本语言VBScript和JavaScript。两者都提供了对用户操作的相应、HTML元素的操纵和特殊效果的实现。其中,VBScript是Microsoft公司以Visual Basic为基础的脚本语言,由于同是Microsoft的产品,VBScript提供对Windows的高级控制,如修改注册表等。JavaScript是另一门脚本语言,与VBScript只支持Internet Explorer不同,JavaScript支持绝大部分的浏览器。首先由Netscape的第二版浏览器推出,紧接着Microsoft在其Internet Explorer 3.0中也提供了JavaScript的支持,此后,其他的浏览器也陆续开始了对JavaScript的支持。然而,由于各浏览器供应商均对JavaScript有自己独特的支持,开发人员在编写JavaScript程序时需要考虑对不同浏览器的支持。
本书所要介绍的Dojo就是一项基于JavaScript的开源技术。Dojo的开发者门在进行设计时,充分考虑了跨浏览器的支持。
2. 使用Ajax开发Web应用
Ajax是AsynchronousJAvascript+Xml的简称。顾名思义,Ajax是由JavaScript作为控制语言,由XML作为数据描述格式,并提供非同步操作的Web客户端处理模式。
本书介绍的Dojo就是一个Ajax框架,其核心就是一个支持同步和异步的数据连接和处理器。
b. MVC与Ajax
模型-视图-控制器(Model-View-Controller)是一种应用程序结构,根据其英文首字母简称为MVC。MVC结构提供了一种按功能对所要处理的数据模型和数据展现形式进行分离的方法,使用MVC可以减少应用中各模块的耦合度,同时还可以分离开发人员的职能,使项目开发中不同的角色可以各尽其职。关于MVC详情请查阅其他资料。
然而,由于HTTP协议是无状态的,如果使用MVC结构,视图层的处理只能以页面为单位,这就意味着,当模型的一小部分数据改变时,就可能需要刷新整个视图。这无疑会大大地降低用户体验,
Ajax的出现彻底解决了这个问题。Ajax使得页面数据处理粒度从页面级细化到页面元素级,利用模拟请求的XmlHttpRequest对象向远端请求资源,XmlHttpRequest将获得的数据以纯文本形式或Xml形式[1]返回给JavaScript进行处理,JavaScript利用其强大的DOM(文档对象模型)功能对Html页面直接进行处理,使用户无需刷新页面即可获得新的信息。Ajax还可以异步获取数据,用户无需等待操作完成即可对页面继续操作。
使用Ajax+MVC可以很好的控制住页面更新粒度,用户需要将当前视图完全转移到另一个时,可以直接使用MVC控制其视图变化,当用户仅仅需要改变某一视图的辅助数据时,就可以使用Ajax方式。
某些Ajax框架甚至支持对服务器端的代码(如Java)进行直接远程调用,开发者甚至可以抛弃MVC架构,直接使用类似桌面应用程序开发方式(如Visual Basic)进行Web应用开发。
c. Ajax开发工具简介
DWR:DWR(Direct Web Remoting)是一个WEB远程调用框架。利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-logging日记操作。
Struts AjaxTags:这个AjaxTags是在现有的Struts HTML标签库上添加对AJAX技术的支持。这是一种MVC与Ajax结合的方式。
GWT:Google Web Toolkit (GWT) 是一个Java软件开发框架用于开发类似于Google Maps和Gmail的AJAX应用程序. 你可以用Java编程语言开发你的界面,然后用GWT编译器将Java类转换成适合浏览器执行的JavaScript与HTML。
Dojo:Dojo是由几个开源项目(nWidgets,Burstlib,f(m))共同贡献的,旨在解决历史上长期存在的、阻碍了人们使用动态Web程序进行开发的问题。
在Dojo的官方网站上,dojo手册是这样写的[2]:
//TODO 在此翻译。
第二章 JavaScript语法简介
本章先使用JavaScript打印出“Hello,JavaScript!”,再以Dojo方式打印出相同的信息,并给出解决Dojo中文化的两种方法,最后总结使用Dojo开发Web应用的步骤。
本节给出一个传统JavaScript的例子,简要说明JavaScript的部分语法,并为之后的Dojo例子提供比较。即使您熟悉JavaScript的使用,也可以粗略浏览此节,直接阅读第二节的内容。
在本例中,我们首先创建一个JavaScript类,
这个例子由两个文件组成,分别为testJavaScript.html和testJavaScript.js,html文件中引用了js文件的内容,js文件将打印出”Hello,JavaScript”字样。
testJavaScript.html:
<html>
<head>
<script src=”testJavaScript.js”></script>
</head>
<body>
</body>
</html>
testJavaScript.js:
function HelloObject(){
this.message=”Hello,JavaScript”;
}
HelloObject.prototype.sayHello(){
document.writeln(this.message);
}
window.attachEvent("onload",initPage);//注释
function initPage(){//实现该函数
var myObject=new MyObject();//实例化一个对象
myObject.sayHello();
}
示例 1
我们看testJavaScript.js,1-6行,我们定义了一个类MyObject,并定义了一个属性message和一个方法sayHello(),然后在第7行,我们调用了内嵌对象window的attachEvent方法为系统的onload事件注册了一个方法initPage,继而实现了该方法:生成一个新的MyObject对象,并调用其sayHello方法。
这个例子到此就完成了,当我们打开testJavaScript.html页面时,就会自动显示”Hello,JavaScript”消息。在这个例子中,我们扩展了JavaScript函数原型定义了一个类,并在页面载入时使用了这个类。
请注意,这个例子虽然实现了功能,但存在着许多局限性:为了与页面载入事件绑定,我们使用了attachEvent方法,而这个方法只对Internet Explorer5.0以上才有效,如果要使用其他的浏览器,如NetScape,Mozilla FireFox,也许我们应该使用addEventListener方法来替代,这意味着,如果这个Web程序需要被多个浏览器访问,我们不得不使用如下的代码:
If(isIE()){
window.attachEvent(…);
}else{
window.addEventListener(…);
}
在JavaScript的使用过程中,这样的不和谐性还有很多,如在获取一个页面元素时,我们也许会使用document.all方法,而这也是Internet Explorer独有的。
事实上dojo是非常易于安装的,只需将整个目录复制至当前的工程,然后在html页面内引入dojo.js即可。介于第一次使用,我们将dojo的配置步骤列举于下:
1. 从dojo网站上下载Dojo的最新版本,目前为
2. 将下载后的压缩包解压。解压后的文件结构如图1所示:
图 1
下面对主要的文件和目录进行介绍:
dojo.js:压缩后的dojo的核心文件,提供了dojo最核心的功能如包定义、远程导入等等。
Dojo.js.uncompressed.js:未被压缩的dojo核心文件,功能与dojo.js相同,不过占用空间比dojo.js稍多,但代码可读性较强。
Src:提供了大部分dojo工具库,如各种数据结构、动画、国际化、加解密、io操作、本地存储、xml解析、dom解析、web特效、html widget等等。
Tests:包含了各模块的测试代码,是dojo学习中很好的示例。根据dojo官方网站上的介绍,该目录下测试到的功能均是稳定的。
实际应用中我们需要使用到dojo.js和src目录,如果需要使用flash控制或存储(storage)控制,还需要引入上图中的几个swf文件。
3. 将dojo.js和src目录复制到工作目录。
下面我们将使用dojo实现上例的功能。
testJavaScript.html:
<html>
<head>
<script language=javascript>
var djConfig={
isDebug:true
};
</script>
<script language=javascript src=”dojo.js”></script>
<script language=javascript>
dojo.setModulePrefix(“com”,”../js/com”);
dojo.require(“com.myjs.MyObject”);
dojo.addOnLoad(function{
var myObject=new com.myjs.MyObject();
myObject.sayHello();
});
</script>
</head>
<body>
</body>
</html>
MyObject.js:
dojo.provide(“com.myjs.MyObject”);
com.myjs.MyObject=function(){
message:”Hello,dojo”,
sayHello(){
dojo.debug(this.message);
}
}
示例 2
运行testJavaScript.html,结果和上例一样。
使用了dojo的程序看起来比上例复杂,实际上dojo程序的结构是比较清晰的,上面的程序做了四件事情:
1. 设置dojo的参数为调试状态(isDebug:true)
2. MyObject.js定义了类com.myjs.MyObject,包含属性message和方法sayHello。
3. 在页面中引入了该类(dojo.require(…))
4. 为页面载入事件注册处理函数(dojo.addOnload(…))
如果您对这种定义类的方法感到陌生,请查阅其他JavaScript资料,在此后的章节中这种语法还会大量出现。
三、Dojo开发步骤
使用Dojo开发程序的步骤简述如下:
1. 按照上一节的步骤配置好dojo开发环境。
2. 如有需要,开发自己的dojo包。
3. 在页面中,设置dojo的全局配置变量djConfig
4. 在页面中,引入dojo.js
5. 使用dojo.require(…)导入所需的包。
6. 实现其他逻辑
实际应用中将会使用到dojo的许多工具包,在第五章中将会一一介绍。
第四章 Dojo的结构体系
一、Dojo的包机制
Dojo代码被拆分为一些逻辑单元,这些单元被成为“模块”。模块与java的包机制非常相似,不过模块更加灵活,一个模块既可以定义一个类,也可以定义一个普通的JavaScript函数。例如dojo.html模块包含了许多函数,而dojo.dnd模块则包含了许多类,如HtmlDragObject。在开发时,习惯函数名以小写字母开头,而类名以大写字母开头。
在例2中,我们定义了一个模块”com.myjs”,并为其定义了类MyObject。下面是与包机制相关的几个基本方法:
dojo.setModulePrefix:
定义包前缀所在的目录。例如dojo.setModulePrefix(“com”,” ../js/com”)
这样我们就定义了一个包前缀com,在运行时,dojo会搜索../js/com目录下的文件来查找com.*的所有子包,例如当我们定义了com.myjs.MyObject类后,需要把MyObject.js放在../js/com/myjs下。默认情况下,dojo包被定义在src子目录下。
dojo.provide:
声明一个包或一个类。
dojo.require:
引入一个包或一个类。dojo.require会按照一定的顺序来检索与类名相同的js文件,例如dojo.require(“A.B”)首先查找A/B.js,然后查找A.js。找到后,会在内存中缓存A.B的类原型(prototype)。
通过包机制,dojo可以很好地从逻辑上区分各JavaScript类,也使JavaScript程序具备更好的移植性。
通常,一个JavaScript文件只声明一个模块,尽管一个文件里可能定义多个类。
二、Dojo的层次
Dojo的包机制为页面程序设计提供了良好的扩展性与管理上的便利性。尽管内核dojo.js只有100多KB的大小,但src目录下却提供了丰富的类库,从基础数据结构到高级的页面渲染与动画,dojo都有简单而快速的解决方案。
图 2
Dojo的工具模块从逻辑上被分为五层,如图2所示,图中每一层都会依赖下方的各层。系统的最底层是包系统(Package System),包系统的主要职责是声明和引入一个包,将类似于”A.B.C”包逻辑描述符号转换为实际的.js文件所在路径,并从该路径读入.js文件内容,然后解释执行,最终实现对JavaScript模块命名空间的区分。
在dojo包系统之上是语言支持库(Language Libraries),包括JavaScript类扩展、dojo事件支持、字符串处理和json支持,其中lang.*提供了JavaScript类型判断、函数功能扩展、属性扩展等,使用这些工具,开发者可以灵活地使用面向对象的方式开发dojo程序;event.*使用一种全新的方式封装并扩展了JavaScript事件的处理;string.*提供了强大的字符串处理功能,为io.*处理数据提供了基础;json.*包含了对json表达式的处理;此外,math.*提供了与数学计算相关的各种函数。值得一提的是,dojo.reflect.*还提供了类似于java语言的类反射功能。
在语言支持库之上的是环境相关库(Environment Specific Libraries),以便dojo能够运行在不同的JavaScript脚本宿主(Script Host)上。由于本书的重点是介绍运行在浏览器中的dojo的使用,故今后我们的重点将放在dom.*( document object model handling,文档对象模型处理)、html.*(html相关处理)和style.*(css效果处理)的使用上。
第四层是应用支持库,这一层提供了dojo应用级别的模块,如本地存储(storate.*)、远程访问(io.*)、远程调用(rpc.*)、拖曳支持(dnd.*)、动画支持(animation.*)、显示特效(fx.*,lfx.*)、日志(logging.*)等等。
架构的最顶层是一些被称作widget的页面组件,一个widget就是一个包含着html元素(如一个输入框或一个层)的节点,通常这个widget在提供其包含的元素的图形显示的同时,还将为其附加一些功能或特效,如一个日历widget(DatePicker)包含一个输入框(input Box),但是当其获得焦点时会弹出一个选择日期的对话框。本书第七章将详细介绍widget的开发和使用。
第五章 常用Dojo模块简介
正如java的lang包一样,dojo的lang模块是dojo工具中最基础的模块。它在JavaScript的语法基础上,在不减少JavaScript语言灵活性的同时,增加了对JavaScript开发的规范性,同时增强了JavaScript对面向对象的支持。
dojo.lang.common提供了一系列类型判断的方法、两个对象相关的方法和一个功能强大的查找方法。详细介绍如下:
dojo.lang.mixin:将参数对象的所有属性和方法都添加到制定对象中。
定义:
dojo.lang.mixin = function(obj,props /*,props,...,props */)
返回:obj
例如:
var srcObj={prop1:"prop1",method1:function(msg){dojo.debug(msg)}};
var dstObj={};
dojo.lang.mixin(dstObj,srcObj);
dstObj.method1(dstObj.prop1);//for testing
dojo.lang.extend:将参数对象原型的所有属性和方法都添加到指定对象的原型中,即继承。与mixin的不同在于,mixin动态地扩展一个对象,而extend动态地扩展一个类。
定义:
dojo.lang.extend = function(ctor /*function*/,props */)
返回:ctor
例如:
function MyClass(){
}
dojo.lang.extend(MyClass,{prop1:"prop1"},{prop2:"prop2"});
var myClass=new MyClass();
dojo.debug(myClass.prop1);
dojo.debug(myClass.prop2);
dojo.lang.find:查找一个元素在指定数组中的位置。
定义:
dojo.lang.find = function( /*Array*/ arr,
/*Object*/ val,
/*boolean*/ identity,
/*boolean*/ findLast)
参数说明:
arr:待查询的数组
val:查询的元素
identity:指明是否为强类型匹配,为true时,需要判断是否值和类型都相同。
findLast:为true时,从前向后搜索;为false时,从后向前搜索。
说明:在使用时,第一个参数既可以是数组,也可以是字符串,当第一个参数为数组时,前两个参数可调换顺序。如dojo.lang.find([1,2,3],1)与dojo.lang.find(1,[1,3])返回值相同。该函数还有一个别名:dojo.lang.indexOf。
例如:dojo.lang.find(["1",1,4],true)返回2,dojo.lang.find(["1",false)返回0,dojo.lang.find(["1",true,true)返回2。
dojo.lang.findLast:按反序查找元素。
定义:dojo.lang.findLast = function(/*Array*/ arr,/*Object*/ val,/*boolean*/ identity)
说明:参数意义与dojo.lang.find前三个相同。
dojo.lang.inArray:判断元素是否在指定数组中。
定义:dojo.lang.inArray = function(arr /*Array*/,val /*Object*/)
除上面介绍的方法以外,dojo提供了一系列is**方法,这些方法只有一个参数,用来判定给定的参数是否为相应的数据类型。但dojo注明,这些方法并不能在所有的情况下都能返回预期的结果,在实际使用时,可以使用JavaScript提供的typeof运算符来判断对应的类型,下面列举出这些函数,各自的函数名可清楚地描述该函数的作用。
dojo.lang.isObject
dojo.lang.isArray
dojo.lang.isArrayLike
dojo.lang.isFunction
dojo.lang.isString
dojo.lang.isAlien
dojo.lang.isBoolean
dojo.lang.isNumber
dojo.lang.isUndefined
JavaScript提供了强大的数组对象,dojo.lang.array模块在此基础上,扩展了几个数组分析和处理的方法,其中大部分的处理方法在dojo的其他模块中被频繁引用,灵活运用这些方法可以大大地减少编程人员的代码逻辑,增加代码的阅读性,推荐读者在实际开发中多多尝试使用。
dojo.lang.has:判断一个数组(或对象)是否包含指定下表的元素(或指定名称的属性)
定义:dojo.lang.has = function(obj,name)
dojo.lang.isEmpty:判断一个数组(或对象)是否为空
定义:dojo.lang.isEmpty = function(obj)
dojo.lang.unnest:将所有参数合并为一个一元数组。
定义:dojo.lang.unnest = function(/* ... */)
例如:unnest(1,3) 返回 [1,3],unnest(1,[2,[3],[[[4]]]]) 返回 [1,3,4]
dojo.lang.toArray:将所有类似数组的对象(arrayLike,具有length属性length属性为一个有限整数)转换为一个真正的数组。
定义:dojo.lang.toArray = function(arrayLike,startOffset)
说明:arrayLike目标对象,startOffset为初始下表,默认为0。转换为标准array的好处在于可以引用array具有的方法如concat、sort等。
例如:假设有一个form有两个同名的input输入框myInput,则form.myInput为一个arrayLike,而dojo.lang.toArray(form.myInput)为一个array。
dojo.lang.map:将一个数组的所有元素传送给指定的一元函数(参数个数为1)作为参数依次调用该函数,将所有调用的返回值以数组的形式返回。
定义:dojo.lang.map = function(arr,obj,unary_func)
说明:arr为参数数组,obj为函数调用时的上下文(相当于context或thisObject),unary_func为指定的一元函数。
例如:
dojo.debug (
"result array is:"+
dojo.lang.map(
[1,
testobj,
function(arg){
dojo.debug("this.aa="+this.aa);
dojo.debug ("arg="+arg);
return arg*1000;
}
));
结果:
DEBUG: this.aa=aa
DEBUG: arg=1
DEBUG: this.aa=aa
DEBUG: arg=2
DEBUG: this.aa=aa
DEBUG: arg=3
DEBUG: this.aa=aa
DEBUG: arg=4
DEBUG: result array is:1000,2000,3000,4000
dojo.lang.forEach:功能与dojo.lang.map类似,但没有返回值。
定义:dojo.lang.forEach = function(anArray /* Array */,callback /* Function */,thisObject /* Object */)
说明:anArray为参数的数组,callback为回调函数,thisObject为回调函数的上下文。
例如:
dojo.debug(
"result array is:"+
dojo.lang.forEach(
[1,
function(arg){
dojo.debug("this.aa="+this.aa);
dojo.debug("arg="+arg);
return arg*1000;
},
testobj
));
结果:
DEBUG: this.aa=aa
DEBUG: arg=1
DEBUG: this.aa=aa
DEBUG: arg=2
DEBUG: this.aa=aa
DEBUG: arg=3
DEBUG: this.aa=aa
DEBUG: arg=4
DEBUG: result array is:undefined
dojo.lang.every:功能与dojo.lang.forEach类似,如果每一次的回调都会返回一个值,则本函数返回true,只要有一个回调没有返回值,则终止本函数并返回false。
定义:dojo.lang.every = function(arr,callback,thisObject)
例如:
dojo.debug(
"result is:"+
dojo.lang.every(
[1,
function(arg){
dojo.debug("this.aa="+this.aa);
dojo.debug("arg="+arg);
if(arg!=3){
return arg*1000;
}
},
testobj
));
结果:
DEBUG: this.aa=aa
DEBUG: arg=1
DEBUG: this.aa=aa
DEBUG: arg=2
DEBUG: this.aa=aa
DEBUG: arg=3
DEBUG: result is:false
dojo.lang.some:功能与dojo.lang.forEach类似,只要有一次回调有返回值,则停止继续回调并返回true,否则返回false。
定义:dojo.lang.some = function(arr,thisObject)
例如:
dojo.debug(
"result is:"+
dojo.lang.some(
[1,
testobj
));
结果:
DEBUG: this.aa=aa
DEBUG: arg=1
DEBUG: result is:true
dojo.lang.filter:与dojo.lang.forEach类似,但会以数组的形式返回所有回调的返回值。
定义:dojo.lang.filter = function(arr,thisObject)
例如:
dojo.debug(
"result is:"+
dojo.lang.filter(
[1,
testobj
));
}
结果:
DEBUG: this.aa=aa
DEBUG: arg=1
DEBUG: this.aa=aa
DEBUG: arg=2
DEBUG: this.aa=aa
DEBUG: arg=3
DEBUG: this.aa=aa
DEBUG: arg=4
DEBUG: result is:1,4
关于对以上几个数组迭代的区别,请从下面两个方面进行比较:
何时终止迭代
返回值
许多测试工具都使用了断言(assert),dojo也提供了该功能,开发者可以在自己的测试代码中使用断言。此外,在dojo中,我们还可以使用断言来对一个函数的形态作出限定。例如,定义某个函数,该函数只能有一个参数,且这个参数为字符串,就可以使用断言。dojo提供了三个断言:assert、assertType和assertValidKeywords。一个断言失败后,会抛出一个JavaScript错误。
assert:断言一个布尔表达式。
定义:dojo.lang.assert = function(booleanValue,message)
例如:
function hello(message){
dojo.lang.assert(arguments.length==1);
dojo.debug("hello "+message);
}
在调用时,如果参数数组的长度不为1,则出错。
dojo.lang.delare是dojo实现面向对象的核心方法,由于调用太过频繁,此方法还有一个别名dojo.declare。通常,对于没
五、URL与导航
第八章 Web应用的整体考虑
第九章 Dojo应用实例
原文链接:https://www.f2er.com/dojo/291990.html