书评:面向对象的 JavaScript,第二版

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观


“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 原型对象的应用。