《JavaScript权威指南》中说到:“JavaScript是面向对象的语言”。这句话固然权威,但实现起来却缺少指南。究其原因,是JavaScript中含有Java这个单词(^_^开个玩笑)。不过,将js与Java对比后就可以发现,js没有直接提供名称空间(也就是包)的机制,同时,类的创建与Java也大相径庭,加之平常对js的使用,也就局限在一些function的定义和触发调用上,因此对js面向对象的性能不感冒,直到dojo这个js框架的出现,就像黑夜中的萤火虫,让人看到了js开发的新局面。
我在参考了dojo book中的相关章节后,写下这篇介绍在dojo中实现js面向对象编程的帖子。如果您对js的面向对象的说法不理解,还请您先参考附件中的《JavaScript权威指南(第五版)》(En),相信这对您学习JavaScript有极大的帮助。
好了,废话说了很多了。先新建一个工程(我用的是Eclipse3.2+MyEclipse5.5+JSEclipse插件):DojoOO
然后将dojo资源加入到工程文件中,现在看起来就像这样:
现在,在dojo文件夹的旁边,建一个自己的文件夹:trace,用来存放自己写的js包和类。
本来,按照Java的规矩,我应该搞个org.trace.***的目录结构的,但是在js中,每一个类我们都得写全称,所以包名就尽量简写了。现在,在trace文件夹下建立util文件夹。注意:dojo的二级文件夹名称是src,自定义的就不需要了,直接把dojo中的三级文件夹提到二级就对了。
现在,就是创建一个类了~~,别忙,在js中,由于没有包的机制,所以我们先得自己建个”包文件“:
注意,这个”包文件“的名字一律都是:__package__.js。内容如下:
- dojo.kwCompoundRequire({common:["trace.util.Person", "trace.util.Employee"]});
- dojo.provide("trace.util.*");
可以看到,用到了dojo的函数。解释一下,第一行是把包内所有的文件进行”注册“,照上面看来,这个util包内应该有Person.js和Employee.js两个文件。第二行就是产生这个包了。至于dojo具体是怎么做的……,咱不care,能用就行。
顺便说一说,如果你要写注释,最”安全“的办法就是将dojo中的某个__package__.js的注释代码段拷过来,再修改其中的内容。我曾经在js代码中遍地开花地写了很多注释,结果在firefox中可以运行,在ie中就报错了(鄙视它),删掉注释后就好了。所以,dojo怎么写,咱最好就怎么写。
现在,来写Person.js,内容如下:
- dojo.provide("trace.util.Person");
- trace.util.Person = function(name,age) {
- this.name = name;
- this.age = age;
- }
- trace.util.Person.prototype.sayWaoo = function() {alert("Waooooo~~");}
这就是《JavaScript权威指南》中最权威的js类定义了。第一行要解释一下,这是在dojo中定义一个类或模块(带包名)的模板语句。Employee.js暂时不写了。现在看起来就像这样:
现在,可以在index.jsp中写入测试代码了。内容如下:
- <%@ page language="java" pageEncoding="UTF-8"%>
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
-
- <title>测试页面</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
-
- <script type="text/javascript">
- var djConfig = {
- isDebug: true,
- debugContainerId: "dojodebug",
- bindEncoding: 'UTF-8'
- };
- </script>
-
- <script type="text/javascript" src="/DojoOO/js/dojo/dojo.js"></script>
-
- <script type="text/javascript">
- dojo.require("trace.util.Person");
- var trace = new trace.util.Person("AKai",23);
- document.write(trace.name);
- </script>
-
- </head>
-
- <body>
- <div id="dojodebug"></div>
- </body>
- </html>
说明几点:1、不可以有base标签;2、dojo的配置一定要按照这个脚本段出现的顺序来;3、最好加上debug属性和一个装载debug信息的容器,不然在ie中很不好调试。
运行一下,看看效果吧:)
刚才在写Person时,用的是一般的js类定义。在dojo中,有它设计的更”亲切“的定义方法,如下:
- dojo.declare("trace.util.Person",null,{
- initializer : function(name, age){
- this.name = name;
- this.age = age;
- },
- sayWaoo: function() {
- alert("Waoooo~~~");
- },
- statics {counter: 0, somethingElse: "hello"}
- });
initializer就相当于构造函数,静态方法,实例方法的定义一目了然。可以注意到,其中有一个null,这表示Person类不继承于其他类,否则,这个null就换成它的父类,就实现了继承功能。(具体做法,参见dojo book中的
相关章节)。本文同时也参考了
这篇文章,在此,一并感谢原作者。
- DojoOO.rar (3 MB)
- 描述: 工程源码以及JavaScript权威指南第五版(英文)
- 下载次数: 218
分享到:
- 2007-07-27 22:15
- 浏览 4946
- 评论(1)
- 论坛回复 / 浏览 (0 / 4023)
- 查看更多
相关推荐
### Dojo类机制实现原理分析 #### 一、概述 Dojo框架是一个强大的JavaScript库,它不仅提供了丰富的用户...这些技术的应用,使得Dojo能够提供强大而灵活的面向对象编程能力,为开发者构建复杂应用提供了有力支持。
这个系统深受面向切面编程(AOP)思想的影响,尤其是其advice机制,允许开发者在不干扰原有代码结构的情况下添加、修改或控制事件处理。 1. **基本事件绑定**: Dojo Event System使得绑定事件处理函数变得简单。...
Dojo是一个非常强大的面向对象的JavaScript的工具箱, 建议大家能够去补充一下JavaScript下如何使用OO进行编程的, 这对于以后阅读Dojo Source有很大的用处
- **面向对象编程**:Dojo的编写风格鼓励面向对象,使代码更加模块化和易于维护,类似于Java或.NET的类结构。 #### 关键概念解析 - **RIA(Rich Interface Applications,富界面应用)**:指具备桌面应用程序特性...
Dojo 是一个功能丰富的 JavaScript 库,它提供了一系列模块化、面向对象的工具,用于构建高性能的 Web 应用程序。在 Dojo 中,模块和包的概念是核心组成部分,它们帮助开发者组织和管理代码,使其更易于维护和重用。...
在深入学习Dojo之前,了解JavaScript的基础知识,尤其是面向对象编程的概念,是非常重要的,因为这将有助于更好地理解和使用Dojo的高级特性。 首先,让我们从基础开始,探讨Dojo的核心概念——模块和包。Dojo的模块...
描述中提到,Dojo是一个“面向对象”的JavaScript工具箱,这意味着它遵循面向对象编程原则,如封装、继承和多态性。这使得Dojo代码更加组织有序,易于理解和维护。Dojo还提供了丰富的Widget(组件)集合,这些组件...
- **dojo/aspect**: 实现AOP(面向切面编程),提供方法的前置、后置、环绕和异常处理等通知功能。 - **dojo/store**: 用于管理数据存储,可以与各种数据源(如JSON、XML、Ajax等)交互。 4. **DOJO的UI组件...
`dojo/aspect`实现了面向切面编程,用于拦截和修改对象方法的调用,是实现AOP的关键。 11. **dojo/i18n** 国际化支持 Dojo 提供了`dojo/i18n`模块,帮助开发者实现多语言支持,轻松切换不同地区的语言资源。 ...
这个压缩包包含的是Dojo框架的1.4.2版本的源码,这是一个较早的版本,但仍然包含了许多核心概念和设计模式,对于学习和理解Dojo的架构以及JavaScript编程技巧非常有帮助。 在Dojo源码中,我们可以深入探索以下几个...
标题中的"dojo,C#做的财务模块"表明这是一个使用C#编程语言开发的财务管理系统,并且在前端部分采用了DOJO框架。DOJO是一个强大的JavaScript库,主要用于构建富互联网应用程序(RIA)。接下来,我们将深入探讨DOJO...
本章探讨了Dojo如何使用JavaScript进行面向对象编程的方法。 3. **第三章:基本Dijit知识** Dijit是Dojo对Widgets的一种称呼。这一章将介绍Dijit的基础知识,并通过实例展示如何使用它们。 4. **第四章:Ajax...
Mootools是一个小巧(36KB压缩后)但功能强大的框架,以其优秀的面向对象编程(OOP)支持和灵活的插件机制著称。Mootools允许开发者选择最符合项目需求的功能模块,如Build Your Own Framework Effects插件(moo.fx...
此外,Dojo Toolkit提供了`dojo.declare`用于类的定义,支持面向对象编程。 Dojo中的Widget系统是另一个重要部分,它包含了大量的UI组件,如按钮、表单元素、日历等,方便开发者构建富客户端应用。这些组件基于dojo...
这个“dojo 离线API”是官方文档的英文原版,旨在帮助开发者在没有网络连接的情况下也能查阅Dojo的相关API和教程,从而更好地理解和运用Dojo框架。 Dojo的核心特性之一是它的模块系统,称为AMD(Asynchronous ...
这个压缩包“dojo-release-1.10.0”包含了Dojo框架的完整资源,使得开发者可以便捷地在项目中集成Dojo。 Dojo的核心组件包括以下几个部分: 1. **dojo/_base**: 这是Dojo的基础模块,包含了Dojo的核心功能,如事件...
通过两天的学习,参与者不仅能够熟悉 JavaScript 的基础语法和面向对象编程,还能够深入了解并掌握 Dojo 框架的核心概念和技术细节。此外,课程中还包括了实用的工具介绍和丰富的实践环节,旨在帮助学员能够迅速上手...
Dojo 提供了面向对象编程的支持,`dojo/declare` 可以创建类,而`dojo/_base/lang` 提供了面向对象的一些辅助函数,如`lang.mixin`用于混合对象属性。 4. **Dijit UI组件** Dijit库提供了一系列可复用的UI组件,...
Dojo 是一个强大的面向对象 JavaScript 框架,由三大模块组成:Core、Dijit、DojoX。Core 提供了 Ajax、events、packaging、CSS-based querying、animations、JSON 等相关操作 API。Dijit 是一个可更换皮肤、基于...