“Object-Oriented JavaScript”第二版 (Packt Publishing,2013 年)对 JavaScript 和使用 JavaScript 对象 进行了出色的介绍。这本书由 Stoyan Stefanov 和 Kumar Chetan Sharma 撰写,副标题是“在这本综合指南中了解关于 OOJS 的一切知识”。这是对第二版 面向对象的 JavaScript 的评论,这本书有八章近 300 页和四个附录近 50 页。
前言
Object-Oriented JavaScript 的前言指出本书适合“任何开始学习 JavaScript 或了解 JavaScript 但不太擅长面向对象部分的人”。前言还指出,读者需要访问现代 Web 浏览器、文本编辑器和可选的 Node.js 设置。
第 1 章:面向对象的 JavaScript
Object-Oriented JavaScript 的第一章提供了 JavaScript 的概述、JavaScript 历史的简要总结、JavaScript 现状的描述以及对 JavaScript 未来的一些推测。
第 1 章对 ECMAScript 5 的介绍描述了 严格模式 ,面向对象编程部分介绍了基本的面向对象概念,例如对象、类、继承、封装、聚合和多态性。
第 1 章以“设置您的训练环境”的讨论结束,介绍了 WebKit 的 Web Inspector 、Mac 上的 JavaScriptCore 以及不同 Web 浏览器上的控制台。
第 2 章:原始数据类型、数组、循环和条件
Object-Oriented JavaScript 的第二章介绍了 JavaScript 的基础知识,例如 变量 和 数据类型 、 运算符 、 比较 、 数组 、 条件 、 循环 、 switch 语句 和 注释 。本章包含 40 多页,很好地介绍了 JavaScript 基础知识,即使对于 JavaScript 相对较新的人来说,这些知识也应该易于理解。
第 3 章:函数
Object-Oriented JavaScript 的第三章开篇很好地总结了函数在 JavaScript 中的重要性:
掌握函数是学习任何编程语言时的一项重要技能,在学习 JavaScript 时更是如此。这是因为 JavaScript 对函数有很多用途,而且该语言的大部分灵活性和表现力都来自于它们。大多数编程语言对某些面向对象的特性都有特殊的语法,而 JavaScript 只使用函数。
第 3 章对 JavaScript 函数 的介绍介绍了 JavaScript 函数的基本语法、如何编写函数以及如何调用函数。本章还有一部分介绍预定义的 JavaScript 函数,例如 parseInt() 、 parseFloat() 、 isNaN() 、 isFinite() 、 encodeURI() 、 decodeURI() 、 encodeURIComponent() 、 decodeURIComponent() 、 eval() 、 和非标准的 alert() 。
面向对象的 JavaScript 的第三章介绍了 JavaScript 最棘手的领域 之一: 变量范围 。它区分了“全局”和“局部”变量,并描述了 变量提升 。本章还介绍了 匿名函数 (包括 回调函数 和 立即函数 )。本章最后介绍了 JavaScript 闭 包。
第 4 章:对象
面向对象的 JavaScript 的前三章主要关注基本的 JavaScript,第一章稍微关注对象和面向对象的概念。然而,直到第四章才对两者的结合(在 JavaScript 中使用对象)进行了有意义的讨论。本章重点介绍 JavaScript 中的对象,并首先 比较 和 对比 JavaScript 对象与 JavaScript 数组 。
的第 4 章介绍了在介绍 构造函数 之前 访问 JavaScript 对象属性 ( 方括号表示法 和 点表示法 )的 两种方法 、“ this ”关键字的使用、“ instanceof ”运算符的使用、比较 JavaScript 对象以及将对象传递给和从 JavaScript 函数返回对象。
第四章“ WebKit 控制台中的对象”部分演示了使用 WebKit 控制台 查看所有 JavaScript 对象的属性以及使用 console.log() 和 console.error() 查看任何所需的 JavaScript 值。第 4 章的一部分还重点介绍了内置 JavaScript 对象 Object 、 Array 、 Function 、 Boolean 、 Number 、 String 、 Math 、 Date 、 RegExp 和 Error 对象。这本书有一个附录(附录 C),其中包含有关更多内置对象的更多详细信息。
第 5 章:原型
原型属性 是 Object-Oriented JavaScript 第五章的主题。本章介绍和解释原型属性如何工作,并区分“自有属性”和“原型属性”。本章讨论了使用 JavaScript for-in 循环 、 Object.prototype.propertyIsEnumerable() 和 Object.prototype.hasOwnProperty() 枚举对象的属性。本章还介绍了 Object.prototype.isPrototypeOf() 和“秘密” __proto__ 属性。
本章的“扩充内置对象”部分描述了向内置构造函数添加新方法。一个子部分还警告了使用此功能的一些相同论点,我在博客文章 Java 开发人员对 JavaScript 对象原型的力量和危险的看法中 讨论过。本章以两个“原型问题”作为结尾。
第 6 章:继承
Object-Oriented JavaScript 的第六章着眼于 JavaScript 中“实现 继承的 常见模式”。它讨论了 原型链接 、 复制原型 、添加 构造函数调用 、创建所谓的 超级函数 以允许子对象访问其父对象,以及将继承逻辑封装在“扩展”函数中。
第 6 章中的一节通过“将您喜欢的属性从一个对象复制[ing]到另一个对象”来讨论“继承”。它涵盖了浅拷贝和深拷贝方法以及自定义 object() 函数的使用,该函数“接受一个对象并返回一个以父对象为原型的新对象”( 原型继承 / Object.create() )。本章讨论的与继承相关的其他项目包括 多重继承 、 混入 、 寄生继承 和 借用构造函数 。
第 6 章以一张表格比较了本章中涵盖的 JavaScript 继承的不同方法。还提供了分析来说明如何决定哪种方法最适合不同的情况。
第 7 章:浏览器环境
第 7 章重点介绍历史上最常见的 JavaScript 部署环境:Web 浏览器。本章首先演示了通过外部文件和直接嵌入 HTML 将 JavaScript 包含在 HTML 页面中。本章随后介绍了 W3C 标准 文档对象模型 ( DOM ) 和非标准 浏览器对象模型 ( BOM ),对它们进行了简要比较和对比,并深入探讨了每个模型的更多细节。
在另一个例子中, 面向对象的 JavaScript 如何提供不一定特定于对象的介绍性 JavaScript 细节,第七章解释了为什么 特征嗅探 (或 能力检测 )通常优于 浏览器检测 。本章还使用插图和文字来解释如何将浏览器控制台用作“备忘单”以“检查对象中的 [BOM 和 DOM 属性]”。
window 对象 的几个属性在第 7 章中进行了介绍和简要描述: window.location 、 window.history 、 window.frames 、 window.screen 、 window.open() 、 window.close() 、 window.moveTo() 、window.resizeTo()、 window.alert() 、 window.prompt() 、 window.confirm() 、 window.setTimeout() 、 window.setInterval() 和 window.document 。本章的一部分解释了 DOM 以及如何遍历它和样式 (CSS) 元素。
第 7 章介绍了事件处理和 Ajax / XMLHttpRequest 的重要内容。第 7 章与第 2 章和第 3 章以及第 1 章的大部分内容一样,一般性地介绍了 JavaScript,而不是特别关注 JavaScript 中的对象。我发现这本书很有趣并且是一个积极的方面,即只有一章专注于 Web 浏览器中的 JavaScript,而本书的其余部分则更广泛地讨论了 JavaScript。
第 8 章:编码和设计模式
本书的最后一章介绍了“编码模式”(在本章中描述为“JavaScript 特定的最佳实践”)和“设计模式”(在本章中描述为“语言无关模式,由著名的 ‘四人帮’ 推广 '书 ")。本章涵盖“编码模式”(或“最佳实践”)的部分讨论了改进 JavaScript 的几种想法。本节涵盖的一些项目包括对 JSON 的 简要介绍、 即时函数 、使用 模块 、使用 名称空间 以及 将行为 与 内容和表示 分离。
第 8 章的第二部分介绍了因 《设计模式:可重用面向对象软件的元素》 一书而流行的 设计模式 ,并从 JavaScript 的角度涵盖了那本面向 C++ 的书中介绍的 23 种模式中的四种。 面向对象的 JavaScript 中涵盖的四种模式是 Singleton 、 Factory 、 Decorator 和 Observer 。
附录
面向对象的 JavaScript 的重要部分以四个附录的形式呈现。附录涵盖了 JavaScript 中的 保留字 (为当前使用保留的关键字、为将来使用保留的关键字以及曾经保留但不再保留的关键字)、 内置 JavaScript 函数 、 内置对象 和 JavaScript 中的 正则表达式 。这些附录主要以表格形式呈现,这使得它们特别适合作为参考。这些章节以更具解释性的文本涵盖了许多相同的主题,然后附录提供了与其中许多主题相关的详细信息的快速参考。
一般观察
- 第一章的大部分内容、第 2 章、第 3 章、第 7 章和第 8 章的一半内容一般涵盖了 JavaScript,而不是重点介绍 JavaScript 对象。这些章节(或者第 8 章中的前半部分)可能被熟悉 JavaScript 语法基础的开发人员跳过,他们主要对学习在 JavaScript 中使用对象特别感兴趣。对于那些很少或没有 JavaScript 经验的人,这些章节提供了足够的介绍性材料,可能排除了在阅读本书之前使用任何其他介绍性 JavaScript 书籍或资源的需要。
- 面向对象的 JavaScript 中的章节往往是带有插图的解释性文本,而附录更简洁地以参考格式表示章节中涵盖的一些相同主题。
- 我审阅过的 面向对象 JavaScript 的 PDF 版本具有高分辨率彩色屏幕快照,有助于说明所提出的观点。
- 代码清单,即使在我看过的电子版中,也是白底黑字,没有行号,也没有彩色语法。
结论
Object-Oriented JavaScript (Second Edition) 是一本写得很好的书,它全面介绍了面向对象的 JavaScript,还介绍了许多其他基本的 JavaScript 概念和语法。对 JavaScript 知之甚少或不熟悉的读者可能会从本书中获益良多,因为其中涵盖了如此多的 JavaScript 概念介绍。即使是对 JavaScript 基本原理有一定经验并熟悉的读者,也可能会发现这本书(尤其是第 4 章到第 6 章)有助于更深入地了解 JavaScript 的面向对象编程和 JavaScript 原型对象的应用。