JavaScript高级程序设计
文章平均质量分 79
blinkstar824
这个作者很懒,什么都没留下…
展开
-
第6章 面向对象的程序设计 (一)
面向对象 (Object-oriented, OO) 的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。前面提到过,ECMAScript 中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。ECMA-262 把对象定义为:"无序属性的集合,其属性可以包含基本值、对象或者函数。"严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或转载 2012-03-14 21:58:27 · 1817 阅读 · 0 评论 -
第7章 匿名函数 (一)
匿名函数就是没有名字的函数,有时候也称为拉姆达 (lambda) 函数。匿名函数是一种强大得令人难以置信的工具,其用途非常之多。来看看下面这个典型的函数声明:function functionName(arg0, arg1, arg2){// 函数体}本书前面讨论过,既可以像上面这样声明函数,也可以像下面这样以函数表达式的形式定义函数:var functionName = fu转载 2012-03-14 23:35:37 · 903 阅读 · 0 评论 -
第4章 变量、作用域和内存问题 (一)
按照ECMA-262第3版的定义,JavaScript的变量与其他语言的变量有很大的区别。JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变。尽管从某种角度看,这可能是一个既有趣又强大,同时又容易出问题的特性,但 JavaScript 变量实际的复杂程度还远转载 2012-03-14 13:05:25 · 818 阅读 · 0 评论 -
第14章 错误处理与调试 (三)
14.4 调试技术14.4.1 将消息记录到控制台IE8、Firefox、Opera、Chrome 和 Safari 都有 JavaScript 控制台,可以用来查看 JavaScript 错误。而且,在这些浏览器中,都可以通过代码向控制台输出消息。对 Firefox 而言,需要安装 Firebug ,因为 Firefox 要使用 Firebug 的控制台。对IE8、Firefox、Chr转载 2012-03-16 22:01:22 · 739 阅读 · 0 评论 -
第13章 表单脚本 (一)
13.1 表单在HTML中,表单是由 元素来表示的,而在 JavaScript 中,表单对应的则是 HTMLFormElement 类型。HTMLFormElement 继承了 HTMLElement,因而与其他 HTML 元素具有相同的默认属性。不过,HTMLFormElement 也有它自己独有的属性和方法。acceptCharset: 服务器能够处理的字符集;等价于 HTM转载 2012-03-16 21:43:40 · 615 阅读 · 0 评论 -
第20章 最佳实践 (四)
20.4 部署20.4.1 构建过程你写的代码不应该原封不动地放入浏览器中,理由如下所示。知识产权问题 -- 如果把带有完整注释的代码放到线上,那别人就更容易知道你的意图,对它再利用,并且可能找到安全漏洞。文件大小 -- 书写代码要保证容易阅读,才能更好地维护,但是对于性能是不利的。浏览器并不能从额外的空白字符或者是冗长的函数名和变量名中获得什么好处。代码组织 -- 组织代码要转载 2012-03-16 23:42:02 · 659 阅读 · 0 评论 -
第20章 最佳实践 (三)
20.3 性能因为 JavaScript 是一个解释型语言,执行速度要比编译型语言慢得多。除此之外,只有有限的资源 (基于浏览器设置) 分配给 Web 应用,也就是说 JavaScript 相比较桌面应用只能访问较少的内存和 CPU 周期。虽然从 2005 年开始,浏览器在 JavaScript 执行性能方面在大踏步前进,但它还是比其他语言慢很多。不过,还是有一些方式可以改进代码的整体性能转载 2012-03-16 23:35:36 · 515 阅读 · 0 评论 -
第20章 最佳实践 (二)
20.2 松散耦合只要应用的某个部分过分依赖于另一部分,代码就是耦合过紧,难于维护。典型的问题如: 对象直接引用另一个对象,并且当修改其中一个的同时需要修改另外一个。紧密耦合的软件难于维护并且需要经常重写。因为 Web 应用所涉及的技术,有多种情况会使它变得耦合过紧。必须小心这些情况,并尽可能维护弱耦合的代码。1.解耦 HTML/JavaScript 一种最常见的耦合类型是 HTM转载 2012-03-16 23:34:15 · 541 阅读 · 0 评论 -
第20章 最佳实践 (一)
自从2000以来,Web开发方面的种种规范、条例正在高速发展。过去曾是荒芜地带,里面东西还都凑合,而现在已经演化成了完整的研究规范,并建立了种种最佳实践。随着简单的网站成长为更加复杂的 web 应用,同时 web 爱好者成为了有收入的专业人士,web 开发的世界充满了各种关于最新技术和开发方法的信息。尤其是 JavaScript ,它从大量的研究和推断中获益。JavaScript 的最佳实践分成若转载 2012-03-16 23:33:08 · 540 阅读 · 0 评论 -
第19章 客户端存储
随着 Web 应用程序的出现,也产生了对于能够直接在客户端上存储用户信息能力的要求。想法很合乎逻辑,属于某个特定用户的信息应该存在该用户的机器上。无论是登录信息、偏好设定或其他数据,web应用提供者发现他们在找各种方式将数据存在客户端上。这个问题的第一个方案是以 cookie 的形式出现的,cookie 是过去 Netscape Communications 公司创造的,并在一个标题为 "持久客户转载 2012-03-16 23:30:19 · 681 阅读 · 0 评论 -
第18章 高级技巧 (四)
18.4 拖放拖放是一种非常流行的用户界面模式。它的概念很简单:点击某个对象,并按住鼠标按钮不放,将鼠标移动到另一个区域,然后释放鼠标按钮将对象 "放" 在这里。拖放功能也流行到了 Web 上,成为了一些更传统的配置界面的一种候选方案。拖放的基本概念很简单:创建一个绝对定位的元素,使其可以用鼠标移动。这个技术源自一种叫做 "鼠标拖尾" 的经典网页技巧。鼠标拖尾是一个或者多个图片在页面上跟着转载 2012-03-16 23:22:31 · 560 阅读 · 0 评论 -
第18章 高级技巧 (三)
18.3 自定义事件在本书前面,你已经学到事件是 JavaScript 与浏览器交互的主要途径。事件是一种叫做观察者的设计模式,这是一种创建松散耦合代码的技术。对象可以发布事件,用来表示在该对象生命周期中某个有趣的时候到了。然后其他对象可以观察该对象,等待这些有趣的时刻到来并通过运行代码来响应。观察者模式由两类对象组成:主体和观察者。主体负责发布事件,同时观察者通过订阅这些事件来观察该主体转载 2012-03-16 23:13:44 · 452 阅读 · 0 评论 -
第12章 事件 (七)
12.5 内存和性能由于事件处理程序可以为现代 Web 应用程序提供交互能力,因此许多开发人员会不分青红皂白地向页面中添加大量的处理程序。在创建 GUI 的语言 (如 C#) 中,为 GUI 中的每个按钮添加一个 onclick 事件处理程序是司空见惯的事,而且这样做也不会导致什么问题。可是在 JavaScript 中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能。导致这一问题转载 2012-03-15 14:58:31 · 499 阅读 · 0 评论 -
第4章 变量、作用域和内存问题 (二)
4.2 执行环境及作用域执行环境 (execution context ,为简单起见,有时也称为 "环境") 是 JavaScript 中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象 (variable object),环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在转载 2012-03-14 19:04:38 · 798 阅读 · 0 评论 -
第12章 事件 (四)
12.4 事件类型Web浏览器中可能发生的事件有很多类型。如前所述,不同的事件类型具有不同的信息,而 "DOM2级事件" 规定了下列 5 种事件:UI (User Interface,用户界面) 事件,在用户与页面上的元素交互时触发;鼠标事件,当用户通过鼠标在页面上执行操作时触发;键盘事件,当用户通过键盘在页面上执行操作时触发;HTML 事件,当浏览器窗口发生变化或发生特定的客户端转载 2012-03-15 14:50:39 · 547 阅读 · 0 评论 -
第10章 DOM (七)
10.3 DOM 操作技术很多时候,DOM 操作都比较简明,因此用 JavaScript 生成那些通常原本是用 HTML 代码生成的内容并不麻烦。不过,也有一些时候,操作 DOM 并不像表面上看起来那么简单。由于浏览器中充斥着隐藏的陷阱和不兼容问题,用 JavaScript 代码处理 DOM 的某些部分要比处理其他部分更复杂一些。10.3.1 动态脚本使用 元素可以向页面中插入 Ja转载 2012-03-15 14:08:09 · 523 阅读 · 0 评论 -
第12章 事件 (五)
12.4.3 键盘事件用户在使用键盘时会触发键盘事件。“DOM2级事件” 最初规定了键盘事件,但在最终定稿之前又删除了相应的内容。结果,对键盘事件的支持主要遵循的是 DOM0 级。“DOM3级事件” 为键盘事件制定了规范,但到 2008 年还没有哪个浏览器实现该规范。有3个键盘事件,简述如下。keydown: 当用户按下键盘上的任意键时触发,而且如果按住不放的话,会重复触发此事转载 2012-03-15 14:52:30 · 537 阅读 · 0 评论 -
第10章 DOM (三)
10.1.3 Element 类型除了 Document 类型之外,Element 类型就要算是 Web 编程中最常用的类型了。Element 类型用于表现 XML 或 HTML 元素,提供了对元素标签名、子节点及特性的访问。Element 节点具有以下特征:要访问元素的标签名,可以使用 nodeName 属性,也可以使用 tagName 属性;这两个属性会返回相同的值 (使用后者主要转载 2012-03-15 14:02:03 · 580 阅读 · 0 评论 -
第5章 引用类型 (四)
5.6 基本包装类型为了便于操作基本类型值,ECMAScript 还提供了3个特殊的引用类型:Boolean、Number 和 String 。这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。来看下面的例子:var s1 = "some转载 2012-03-14 19:16:55 · 548 阅读 · 0 评论 -
第5章 引用类型 (一)
引用类型的值 (对象) 是引用类型的一个实例。在 ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组合在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript 从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。如前所述,对象是某个特定引用类型的实例。转载 2012-03-14 19:08:19 · 602 阅读 · 0 评论 -
第5章 引用类型 (五)
5.7 内置对象ECMA-262对内置对象的定义是:“由 ECMAScript 实现提供的、不依赖宿主环境的对象,这些对象在 ECMAScript 程序执行之前就已经存在了。”意思就是说,开发人员不必显式地实例化内置对象;因为它们已经实例化了。ECMA-262 只定义了两个内置对象:Global 和 Math 。5.7.1 Global 对象Global (全局) 对象可以说是 ECM转载 2012-03-14 19:22:04 · 540 阅读 · 0 评论 -
第5章 引用类型 (二)
5.3 Date 类型ECMAScript 中的 Date 类型是在早期 Java 中的 java.util.Date 类基础上构建的。为此,Date类型使用自 UTC( Coordinated Universal Time ,国际协调时间) 1970年1月1日午夜 (零时) 开始经过的毫秒数来保存日期。在使用这种数据存储格式的条件下,Date 类型保存的日期能够精确到 1970 年 1月转载 2012-03-14 19:11:34 · 1496 阅读 · 0 评论 -
第17章 Ajax 与 JSON (一)
2005年,Jesse James Garrett 发表了一篇在线文章,题为 "Ajax: A new Approach to Web Applications"。他在这篇文章里介绍了一种技术,用他的话说,就叫Ajax, 是对 Asynchronous JavaScript + XML 的简写。这一技术能够向服务器请求额外的数据而无须卸载页面,会带来更好的用户体验。Garrett 还解释了怎样使用转载 2012-03-16 22:08:23 · 683 阅读 · 0 评论 -
第11章 DOM2 和 DOM3 (二)
11.2 样式在 HTML 中定义样式的方式有3种:通过 元素包含外部样式表文件、使用 元素定义嵌入式样式,以及使用 style 特性定义针对特定元素的样式。"DOM2 级样式“模块围绕这3种应用样式的机制提供了一套 API 。要确定浏览器是否支持 DOM2 级定义的 CSS 能力,可以使用下列代码:var supportsDOM2CSS = document.implementati转载 2012-03-15 14:16:37 · 936 阅读 · 0 评论 -
第5章 引用类型 (三)
5.5 Function 类型说起来 ECMAScript 中什么最有意思,我想那莫过于函数了 -- 而有意思的根源,则在于函数实际上是对象。每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函数声明语法定义的,如下面的例子所示:function sum (num转载 2012-03-14 19:13:37 · 616 阅读 · 0 评论 -
第1章 JavaScript简介
1.2 JavaScript实现虽然JavaScript和ECMAScript通常都被人们用来表达相同的含义,但JavaScript的含义却比ECMA-262中规定的要多得多。没错,一个完整的JavaScript实现应该由下列三个不同的部分组成。核心(ECMAScript)文档对象模型(DOM)浏览器对象模型(BOM) 1.2.1 ECMAScript由EC转载 2012-02-25 22:36:06 · 1431 阅读 · 0 评论 -
第18章 高级技巧 (二)
18.2 高级定时器使用 setTimeout() 和 setInterval() 创建的定时器可以用于实现有趣且有用的功能。虽然人们对 JavaScript 的定时器存在普遍的误解,认为它们是线程,其实 JavaScript 是运行于单线程的环境中的,而定时器仅仅只是计划代码在未来的某个时间执行。执行时机是不能保证的,因为在页面的生命周期中,不同时间可能有其他代码在控制 JavaScript转载 2012-03-16 23:08:09 · 736 阅读 · 0 评论 -
第18章 高级技巧 (一)
JavaScript 是一种极具弹性的语言,可用于多种样式。一般来说,编写 JavaScript 要么使用过程方式,要么使用面向对象方式。然而,由于它天生的动态属性,这种语音还能使用更为复杂和有趣的模式。这些技巧要利用 ECMAScript 的语言特点、BOM 扩展和 DOM 功能来获得强大的效果。18.1 高级函数函数是 JavaScript 中最有趣的部分之一。它们本质上是十分简单和程转载 2012-03-16 22:35:36 · 516 阅读 · 0 评论 -
第12章 事件 (二)
12.2 事件处理程序 (或事件侦听器)事件就是用户或浏览器自身执行的某种动作。诸如 click、load 和 mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序 (或事件侦听器)。事件处理程序的名字以 "on" 开头,因此 click 事件的事件处理程序就是 onclick,load 事件的事件处理程序就是 onload。为事件指定处理程序的方式有好几种。12.2转载 2012-03-15 14:42:16 · 552 阅读 · 0 评论 -
第12章 事件 (一)
JavaScript 与 HTML 之间的交互是通过事件实现的。事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码。这种在传统软件工程中被称为观察员模式的模型,支持页面的行为(JavaScript 代码) 与页面的外观 (HTML 和 CSS 代码)之间的松散耦合。事件最早是在IE3和Netscape Navigator3转载 2012-03-15 14:39:07 · 544 阅读 · 0 评论 -
第11章 DOM2 和 DOM3 (一)
DOM1级主要定义的是 HTML 和 XML 文档的底层结构。DOM2 和 DOM3 级则在这个结构的基础上引入了更多的交互能力,也支持了更高级的 XML 特性。为此,DOM2 和 DOM3 级分为许多模块 (模块之间具有某种关联),分别描述了 DOM 的某个非常具体的子集。这些模块如下:DOM2级核心 (DOM Level 2 Core): 在1级核心基础上构建,为节点添加了更多方法转载 2012-03-15 14:09:33 · 1590 阅读 · 0 评论 -
第10章 DOM (六)
10.2 DOM扩展根据 W3C 对 DOM 的要求,浏览器可以自行为其添加属性和方法,以增强其功能。新增的部分功能是为了向后兼容,而另一些功能则是根据开发人员的反馈,针对解决常见的问题而添加的。无论出于什么原因,扩展 DOM 的做法已经相当普遍,而且对开发也有极大的好处。10.2.1 呈现模式随着 IE6 开始区分标准模式和混杂模式,确定浏览器处于何种模式的需求也就应运而生。IE 为转载 2012-03-15 14:05:57 · 678 阅读 · 0 评论 -
第10章 DOM (五)
10.1.7 DocumentType 类型DocumentType 类型在 Web 浏览器中并不常用,仅有 Firefox、Safari 和 Opera 支持它。DocumentType 包含着与文档的 doctype 有关的所有信息,它具有下列特征:nodeType 的值为 10;nodeName 的值为 doctype 的名称;nodeValue 的值为 null;paren转载 2012-03-15 14:04:11 · 427 阅读 · 0 评论 -
第10章 DOM (四)
10.1.4 Text 类型文本节点由 Text 类型表示,包含的是可以照字面解释的纯文本内容。纯文本中可以包含转义后的 HTML 字符,但不能包含 HTML 代码。Text 节点具有以下特征:nodeType 的值为3;nodeName 的值为 "#text";nodeValue 的值为节点所包含的文本;parentNode 是一个 Element ;不支持 (没有) 子节点。转载 2012-03-15 14:03:14 · 519 阅读 · 0 评论 -
第10章 DOM (二)
10.1.2 Document 类型JavaScript 通过 Document 类型表示文档。在浏览器中,document 对象是 HTMLDocument (继承自 Document 类型) 的一个实例,表示整个 HTML 页面。而且,document 对象是 window 对象的一个属性,因此可以将其作为全局对象来访问。Document 节点具有下列特征:Document 类转载 2012-03-15 13:57:12 · 600 阅读 · 0 评论 -
第6章 面向对象的程序设计 (二)
6.2 继承继承是OO语言中的一个最为人津津乐道的概念。许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。如前所述,由于函数没有签名,在 ECMAScript 中无法实现接口继承。 ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链来实现的。6.2.1 原型链ECMAScript 中描述了原型链的概念,并将原型链作转载 2012-03-14 22:09:17 · 805 阅读 · 0 评论 -
第2章 在HTML中使用JavaScript
2.1 元素向HTML页面中插入JavaScript的主要方法,就是使用元素。这个元素由Netscape创造并在Netscape Navigator 2中首先实现。后来,这个元素被加入到正式的HTML规范中。HTML 4.01为定义了下列5个属性。charset : 可选。表示通过 src 属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少有人用。defer :转载 2012-03-14 00:52:30 · 1127 阅读 · 0 评论 -
第3章 基本概念(一)
目前,ECMA-262第3版中定义的ECMAScript是各浏览器实现最多的一个版本。ECMA-262第4版引入了新的语法、操作符、对象和动态修改 JavaScript 运行方式的概念。考虑到各浏览器对第4版的支持还很不充分,本章将完全按照第3版定义的 ECMAScript 介绍这门语言的基本概念。3.1 语法ECMAScript 的语法大量借鉴了 C 及其他类 C 语言 (如 Java转载 2012-03-14 00:59:54 · 741 阅读 · 0 评论 -
第3章 基本概念(二)
3.5 操作符ECMA-262描述了一组用于操作数据值的操作符,包括算术操作符 (如加号和减号) 、位操作符、关系操作符和相等操作符。ECMAScript 操作符的与众不同之处在于,它们能够适用于很多值,例如字符串、数字值、布尔值,甚至对象。不过,在应用于对象时,相应的操作符通常都会调用对象的 valueOf() 和(或) toString() 方法,以便取得可以操作的值。3.5.1 一元转载 2012-03-14 12:59:43 · 701 阅读 · 0 评论 -
第12章 事件 (三)
12.3 事件对象在触发 DOM 上的某个事件时,会产生一个事件对象 event,这个对象中包含着所有与事件有关的信息。包括导致事件的元素、事件的类型,以及其他与特定事件相关的信息。例如,鼠标操作导致的事件对象中,会包含鼠标位置的信息,而键盘操作导致的事件对象中,会包含与按下的键有关的信息。所有浏览器都支持 event 对象,但支持方式不同。12.3.1 DOM 中的事件对象兼容转载 2012-03-15 14:45:59 · 443 阅读 · 0 评论