`
子衿青青
  • 浏览: 110917 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

部分Dojo常用函数简介(二)——面向对象(OO)及包机制(package system)

 
阅读更多

每个Ajax 框架都对Javascript 做了扩展,提供了很多常用函数,增强了 Javascript 的开发效率。在这里将对部分Dojo 中的常用函数做简单的介绍。由于Dojo的常用函数较多,也为方便大家阅读,将这些常用函数分为了五个类别分别进行介绍。本文将介绍第二部分的内容:面向对象(OO)及包机制(package system)常用函数。

* 本系列博文的绝大多数内容来自于对dojocampus.org上的dojo reference guide文档的翻译,在此也特别感谢文档的翻译者们:Fei Jia, Zhu Xiao Wen, Li Wen Bing, Zhang Jun, Hu Kuang, Huang Wei, Wu Min Qi, Mo Ying, Cheng Fu, Zhong Si Qi

dojo.require

如果你想使用Dojo作为你的开发工具包,那么dojo.require是你必须要熟练掌握的。Dojo采用了与Java语言类似的命名空间(namespace)、包(package)机制,Dojo的代码都被切分为各个模块存储在各个的包中,如果你需要用到Dojo中的某个模块,那么就需要首先调用dojo.require("modulename")来预先加载该模块,否则的话,script将会抛错提示"dojo.some not defined"。


dojo.require接收一个字符串参数,该参数为要进行加载的模块名。下面是一个简单的示例:

另外,由于各个模块之间有相互依赖性存在,用户想逐个判断并加载所有需要的模块是件很困难的事情,因此,dojo.require也提供了一些很不错的特性:

  • 自动载入所有依赖的模块:

例如, dijit.form.NumberTextBox 需要引用 dojo.number ,那么当你使用dijit.form.NumberTextBox时,则不需要再次声明引用dojo.number模块。

  • 预防多次载入:

当某个模块已经载入,再次声明引用相同模块,dojo.require会直接返回,而不会再次加载相同的模块。

  • 通过自定义打包机制快速载入所需模块:

用户可以通过dojo提供的打包机制构建定制化的dojo包,以快速载入模块。你可以通过定制化将会多次使用的模块预加载到dojo中,而由于dojo.require()的预防多次加载机制,你也不需要对代码进行修改。

那么你可能会问,那我是不是需要通过require机制来先载入dojo.require呢?答案当然是不。顶层dojo包中的所有函数都是自动加载的(如dojo.query(),dojo.byId(),等等)。这些都是dojo的核心方法,都会在dojo引用中被频繁使用。就如同Java中的java.lang包,无需显式声明加载。

dojo.provide

与dojo.require相对应,dojo.provide是用于提供dojo模块名的函数。每一个Dojo类都必须在源代码文件开始处提供至少一个dojo.provide(),并和文件名相匹配. 例如在"Js/dojo/foo.js"文件中,在调用任何"dojo.require()"前 必须先添加 "dojo.provide('dojo.foo');" 。

下面的代码示例假设对应 my/module.js 源文件,请注意dojo.provide的调用始终在dojo.require之前。

注意,同一个文件中可以有多个dojo.provide,但在build脚本中一般只使用一个dojo.privide()以正确匹配文件名。

dojo.declare

JavaScript和Java不一样,它没有一个类系统,但是Dojo提供了一套模拟Java的类系统的机制:dojo.declare。
dojo.declare 接受如下的三个参数:

className: 字符串,可以为null,声明的类的名称,这个类名会被用作创建的构造子的全局名称,如果不指明名称,该类将被认为是匿名的(从V1.4开始),如果指明了名称,那么名字会被存储在创建的原型的属性”declaredClass” 中。

superclass:一个对象或对象数组,也可以为null(没有基类),声明了该类的基类,当为该参数为数组时,说明该类有多个基类。

props:一个对象,此对象所有的属性将混入到被创建的原型中。

另外,通过将一个属性命名为”constructor”,你可以为创建的对象实例增加一个初始化函数。

例子:

这里我们声明了一个不继承任何类的简单的类,名为 my.Thinger 。该类最终含有一个名为 constructor 的构造函数。
你可以这样创建一个 my.Thinger 实例:

dojo.mixin

dojo.mixin用于将对象混合在一起。所谓mixin(混入)是将两个对象从右到左组合起来,覆盖最左边的对象,并且返回混入后的对象给用户。Dojo的这个mixin非常类似于 dojo.extend ,但它只能用于对象,而不像extend显式地扩展一个对象的原型(object.prototype)。


mixin函数修改的是列表中第一个对象,将第二个对象(及以后所有对象)混入到第一个对象中。

如果您希望创建一个全新的混合对象,有如下几种做法:第一种,用dojo.clone克隆现有对象,然后再混入:

另一种做法是,可以用一个空对象作为第一个参数,然后将其他对象混入到这个空对象里面。您可以不断重复这个过程:

只要记住作为第一个参数的对象实例总是会被改写,并且越右面的对象,其优先级越高。

dojo.extend

dojo extend 的工作原理十分类似 dojo.mixin, 区别在于它会直接作用于一个对象的原型(prototype)之上。和mixin一样,dojo.extend将其参数最右侧的对象的成员直接合并进入第一个参数的对象。


我们可以利用extend方法来扩展一个现有类的功能:

dojo.exists

dojo.exists用于检查一个字符串中利用点号’.’分隔的所有对象是否存在, 例如 A.B.C 。dojo.exists 是一个很方便的方法,特别是在需要检测一个较长的对象路径时。它接受一个字符串作为它的第一个参数,该方法将试图沿着此字符串所表示的路径去检测此路径上所含的对象是否存在。第二个参数是可选的,可以设定一个对象作为前面所设的字符串所表示的路径的根。如果忽略第二个参数,则它将会默认使用全局对象作为根来进行检索。字符串中每个被’.’分隔的部分都会被检测是否定义过,只有当该路径上所有对象都存在时此方法才会返回true。


dojo.exists 的第一个参数是一个字符串表示要检测的对象路径,第二个参数是可选参数,是作为搜索该对象路径的根对象。返回值为一个boolean值。

dojo.clone

用于克隆对象或DOM节点,该函数返回一个克隆后的新对象。

以上就是部分Dojo的面向对象(OO)及包机制(package system)常用函数,在下一部分中,会介绍关于页面生命周期及DOM相关的一些常用函数。

分享到:
评论

相关推荐

    dojo的包加载机制

    其中,Dojo的包加载机制是其核心特性之一,它使得在大型应用中组织和管理JavaScript代码变得更为高效。这里我们将深入探讨Dojo的包加载机制,并结合提供的源代码和文档进行分析。 首先,Dojo的包加载机制基于AMD...

    dojo精品中文教程(包二)

    DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 Dojo和JSON建立无限级AJAX动态加载的功能模块树 Dojo学习笔记( 模块与包) Dojo学习笔记-- djConfig解说 Dojo学习笔记-- dojo.dom ...

    dojo常用方法总结

    ### Dojo常用方法总结 Dojo是一个开源的JavaScript框架,用于构建高性能的富客户端Web应用程序。它提供了一系列功能强大的工具和API,可以帮助开发者更轻松地处理DOM操作、AJAX调用、用户界面组件构建等任务。本文...

    dojo精品中文教程(包一)

    DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 Dojo和JSON建立无限级AJAX动态加载的功能模块树 Dojo学习笔记( 模块与包) Dojo学习笔记-- djConfig解说 Dojo学习笔记-- dojo.dom ...

    DOJO 学习笔记 dojo

    Dojo 是一个功能丰富的 JavaScript 库,它提供了一系列模块化、面向对象的工具,用于构建高性能的 Web 应用程序。在 Dojo 中,模块和包的概念是核心组成部分,它们帮助开发者组织和管理代码,使其更易于维护和重用。...

    dojo工具包zip

    Dojo工具包是一个广泛使用的JavaScript库,主要用于构建交互式的Web应用程序。这个压缩包包含了你在学习Dojo时可能需要用到的各种资源,旨在提供一个完整的开发环境,同时也作为一种备份手段。现在,让我们深入了解...

    Dojo相应的jar包

    1. **dojo/_base**: 这是Dojo的基础模块,包含了Dojo的核心功能,如事件处理、对象创建、函数绑定等基础工具。 2. **dojo/dom**: 提供了与HTML文档对象模型(DOM)交互的功能,如查找、操作和样式控制。 3. **dojo...

    dojo学习...........

    2. 引入Dojo核心库:通过`<script>`标签引入`dojo.js`,这是Dojo的基础文件,可能已经包含了部分常用模块。 3. 声明需要使用的模块:使用`dojo.require()`来引入所需的包或模块,确保它们在运行时可用。 Dojo为了...

    dojo所有jar包dojoroot

    这部分是Dojo的基础,任何使用Dojo的项目都会依赖它。 2. **Dijit**:Dijit是Dojo提供的UI组件库,包含了大量的可复用、可主题化的用户界面元素,如按钮、表单、对话框、进度条等,极大地简化了前端界面的开发工作...

    Dojo 入门 + Dojo 工具包系列 + Dojo 使用技巧 ......

    总的来说,Dojo是一个功能强大且全面的JavaScript工具包,对于Java开发者来说,它提供了从强类型语言向动态脚本语言过渡的桥梁,让开发者能够利用熟悉的面向对象编程概念来构建高性能的Web应用。通过深入理解Dojo的...

    dojo精品中文教程(全)

    DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 Dojo和JSON建立无限级AJAX动态加载的功能模块树 Dojo学习笔记( 模块与包) Dojo学习笔记-- djConfig解说 Dojo学习笔记-- dojo.dom ...

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信等多个方面。Dojo的核心在于它的模块化系统,这使得开发者可以按需加载代码,提高应用的性能和可维护...

    dojo精品中文教程(包三)

    DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 Dojo和JSON建立无限级AJAX动态加载的功能模块树 Dojo学习笔记( 模块与包) Dojo学习笔记-- djConfig解说 Dojo学习笔记-- dojo.dom ...

    dojo包和例子

    在"dojo包(含报表例子)"这个压缩包中,我们很可能会找到一系列关于Dojo框架的源代码、文档以及实际应用示例。这些例子可以帮助开发者更好地理解和学习如何使用Dojo来处理各种Web开发任务,尤其是涉及到数据展示和...

    dojo函数+实例[初步整理]

    Dojo提供了一系列用于处理Ajax请求的函数,其中`dojo.xhrGet`和`dojo.xhrPost`是最常用的两个函数。 ##### 4.1 发送GET请求 下面是一个简单的示例,展示了如何使用`dojo.xhrGet`发送GET请求并处理响应: ```...

    dojo类机制实现原理分析

    ### Dojo类机制实现原理分析 #### 一、概述 Dojo框架是一个强大的JavaScript库,它不仅提供了丰富的用户界面组件,还内置了一套强大的类机制。本文旨在深入探讨Dojo类机制背后的实现原理,包括其类声明方式、继承...

    dojo必须的包-dojo-release-1.3.0

    《Dojo 必备包:dojo-release-1.3.0 深度解析》 Dojo 是一个广泛使用的开源JavaScript库,它提供了一系列强大的工具和功能,用于构建富交互式的Web应用程序。在这个主题中,我们将深入探讨的是Dojo的核心发布版本...

    dojo中文文档-dojo手册

    这个模块基础包含了Dojo的核心功能,如对象创建、函数绑定、事件处理等。通过使用dojo.require和dojo.provide,开发者可以实现代码的模块化,提高代码复用性和可维护性。 Dojo的dojo.query方法类似于jQuery的选择器...

    Dojo构建Ajax应用程序源码(包括书中用到的dojo-release-1.1.2)

    `dojo/_base/kernel`是Dojo的核心模块,提供了基础对象和函数。 2. **DOM操作**:Dojo提供了`dojo/dom`和`dojo/query`模块来操作和查找HTML元素。`dojo/dom-geometry`用于获取元素的位置和尺寸,而`dojo/dom-class`...

Global site tag (gtag.js) - Google Analytics