Web浏览器环境中的JavaScript

① 作为全局执行环境的Window对象

在客户端JavaScript中,表示html文档的是Document对象Window对象代表显示该文档的窗口(或帧)。虽然Document对象和Window对象都很重要,但是相比较而言,Window对象更重要一些,一个本质上的原因是Window对象是客户端编程中的全局对象。

我们已经知道,JavaScript的每一个实现都有一个全局对象,该对象位于作用域链的头部。这个全局对象的属性也就是全局变量。客户端JavaScript的Window对象是全局对象,它定义了大量的属性和方法,使用户可以对Web浏览器的窗口进行操作。它还定义了引用其他重要对象的属性,如引用Document对象的document属性。此外Window对象还包括了两个自我引用的属性:window和self。可以使用这两个全局变量来直接引用Window对象。

由于在客户端JavaScript中Window对象是全局对象,因此所有的全局变量都被定义为该对象的属性。例如下面两行代码实际上执行的是相同的功能。

var answer=42;
window.answer=42;
应用程序中出现的每个窗口都对应一个Window对象,而且都为客户端JavaScript代码定义了一个唯一的执行环境。换句话说,JavaScript代码在一个窗口中声明的全局变量并不是另一个窗口的全局变量。但是另一个窗口中的JavaScript代码却可以存取第一个窗口的全局变量,受到某种安全限制。我们将在以后章节中讨论这个问题。

② 客户端的对象层次和文档对象模型DOM

Window对象是客户端JavaScript的一个关键对象。其他所有的客户端对象都通过这个对象访问。例如每个Window对象都定义了一个document属性,该属性引用与这个窗口关联在一起的Document对象,location属性引用与该窗口关联在一起的Location对象。当一个Web浏览器显示一个带帧的文档,顶层的Window对象的frames[ ]数组包含了对代表帧的Window对象的引用。因此在客户端JavaScript中,表达式document代表的是当前窗口的Document对象,而表达式frames[1].document引用的是当前窗口的第二个子帧的Document对象。Document对象(以及其他的客户端JavaScriptd对象)也可以拥有引用其他对象的属性。例如每个Document对象都有一个forms[ ]数组,它包含的是代表该文档中出现的所有html表单的Form对象。要引用这些表单,可以编写如下代码:

window.document.forms[0]
继续使用上面的例子,每个Form对象都有一个 elements[ ]数组,该数组包含了出现在表单中的各种HTML表单元素的对象。在极其特殊的情况下,可以编写引用整个对象链底部的对象的代码,其表达式的复杂度如下:

parent.frames[0].document.forms[0].elements[3].options[2].text
我们已经知道,Window对象是位于作用域链头部的全局对象,JavaScript中的所有客户端对象都是作为其他对象的属性来存取的。这就是说,存在一个JavaScript对象的层次,这个层次的根是一个Window对象。下图说明了这一层次。仔细研究这幅图,理解其中的层次以及它所包含的对象。注意下图仅仅显示出了那些引用其他对象的属性。图中所示的大部分对象具有的方法和属性都比显示出来的要多。

图中显示的许多对象都继承了Document对象。大型的客户端对象层次的子树叫做文档对象模型(DOM),它很有趣,因为它已经成为标准化进程的焦点。Document对象已经成为实际标准,所有主流浏览器都统一实现了它。它们称为0级DOM,因为它们构成了文档功能的基本级别,JavaScript程序员在所有浏览器中都可以应用该级别。

③ 事件驱动的编程模型

对于如何响应客户端用户的操作,JavaScript采用的是事件驱动的编程模型。Web浏览器使用事件(event)来通知程序有用户输入。事件的类型有很多种,例如按键事件,鼠标移动事件等等。当一个事件发生时,Web浏览器会先尝试调用一个适合的事件句柄函数来响应那个事件。因此要编写一个动态的、交互性的客户端JavaScript程序,必须先定义一些适当的事件句柄,并将它们注册到系统中,这样浏览器才能在适当的时刻调用它们。在事件驱动的编程模型中,可以编写大量独立的事件句柄。程序员并不需要直接调用这些处理函数,而是让系统在适当的时机调用它们。

④ 无干扰的JavaScript

一种新的叫做无干扰的JavaScript的客户端编程模式已经在web开发社区中流行开来。这种模式强调JavaScript自身不应该惹人注意,不应该产生干扰。编写无干扰的JavaScript代码并没有确定公式,但是一些有用的实践还是颇可行的。

⑴ 无干扰的JavaScript的首要目标就是保持JavaScript代码和HTML标记的分离。这种让内容分离于行为的方式,与将CSS放入样式表而保持内容与表现分离的方式如出一辙。为了实现这一目标,把所有的JavaScript代码放入到外部文件中,并且用<script src=>标记把这些文件包含到HTML页面中。如果区分内容和行为很严格,就不会把JavaScript代码包含到HTML文件的事件句柄属性中。相反,会编写JavaScript代码(在一个外部文件中)然后在需要它们的HTML元素上注册事件句柄。为了实现这一目标,要尽可能地让JavaScript代码的外部文件成为模块。这允许把多个独立的代码模块包含到同一个web页面中,而不需要担心一个模块的变量和函数覆盖了其他模块的变量和函数。

⑵ 无干扰的JavaScript的第二个目标是它必须降低优雅性。

⑶ 无干扰的JavaScript的第三个目标是,它不能降低一个HTML页面的可访问性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值