Dojo 在基于Web 的应用程序中越来越受到欢迎。很多开发人员是 Java™ 编程方面的能手,但是在 JavaScript
方面却缺乏经验。从强类型、面向对象的编译语言转向动态的、弱类型脚本语言,开发人员需要经历概念跃迁带来的困难。这种混乱使开发人员很难正确地声明
Dojo 类。本文将帮助梳理这种混乱,解释为何必须设置上下文,以及如何实现它。
简介
如果您是一名只有很少或根本没有 JavaScript 经验的开发人员,在接触 Dojo 时可能需要掌握一些必要的概念。Dojo
的一个主要问题是(在撰写本文之际),它仍然处于其婴儿期(版本 1.0 在 2008 年 2
月份才发布),并且可用的文档仍然非常有限。本文将帮助您理解 Dojo 和 Java
代码之间的联系,使您在开发应用程序时可以快速入手并掌握这个工具箱。
本文并没有介绍如何获得 Dojo 工具箱或一些必要的使用指令,因为已经有大量的资源提供了此类信息。本文主要针对从 servlet 开发转向 Dojo 的 Web 开发人员。
JavaScript hash
需要面对的主要挑战之一就是理解在调用 Dojo 函数时使用的语法,特别是 “hash” 或 JavaScript 对象。hash
被表示为使用逗号间隔的一组属性,并且使用大括号括起。清单 1 显示了一个简单的例子,它声明了一个包含 6 个属性的
hash:一个字符串、一个整数、一个布尔值、一个未定义的属性、另一个 hash 和一个函数。
清单 1. 示例 JavaScript hash
var myHash = {
str_attr : "foo",
int_attr : 7,
bool_attr : true,
undefined_attr : null,
hash_attr : {},
func_attr : function() {}
};
注意,JavaScript 是弱类型的,因此尽管每个属性被初始化为一个与其名称相关的值,但仍然需要把 str_attr 属性设置为一个整数或布尔值(或其他任何类型)。使用 dot 操作符可以访问或设置 hash 中的每个属性(参见清单 2)。
清单 2. 访问和设置 hash 属性
// Accessing a hash attribute...
console.log(myHash.str_attr);
// Setting a hash attribute...
myHash.str_attr = "bar";
myHash 的前四个属性的含义不言自明。事实上,hash 可以拥有 hash 属性,这并不奇怪。(可以将这看作类似于原语和对象的 Java 类)。这是需要理解的最后一个重要属性。
函数和对象
尽管 Java 代码中有一个 java.reflection.Method 类,但它实际上只充当方法的包装器。在 JavaScript
中,该函数可以是任何可