具体描述
1.本书是唯一一本介绍JavaScript面向对象编程的图书。
2.本书作者是知名的Web开发人员和作者。受到国内众多前端开发人员,如淘宝UED团队的推崇和推荐。 Stoyan Stefanov:Facebook公司工程师、作家、演说家。他经常会在其博客(www.phpied.com)与一些相关会议中就Web开发话题发表独到见解。他还运营着其他一些网站,其中包括JSPatterns.com—一个用于探讨JavaScript模式的网站。
3.本书内容较为简单,初学者容易上手。
内容提要
JavaScript语言是一种具有高度表达能力的、基于原型特性的、非常灵活的面向对象程序设计语言。本书着重于介绍JavaScript在面向对象方面的特性,以为您展示如何去构建强健的、可维护的、功能强大的应用程序及程序库。
本书是《JavaScript面向对象编程指南》的第二版,全书包括8章和4个附录。依次介绍了JavaScript的发展历史、基础性话题(变量、数据类型、数组、循环以及条件表达式)、函数、对象、原型、继承的实现、BOM和DOM等。附录部分包括了学习JavaScript编程常用的参考资源。尤其值得一提的是,本书作者是JavaScript设计模式方面的专家,他在本书第8章中介绍了几种常用的JavaScript编程模式,这也成为他的另一本重要著作《JavaScript模式》(JavaScript Patterns)奠定了基础。
本书全面地覆盖了JavaScript语言的OO特性,同时兼顾基础知识,对初学者来说,是难得的JavaScript佳作。读者不需要具备任何的JavaScript基础知识及项目经验,通过学习这本书,将会在面试有关JavaScript程序设计的职位时游刃有余。
作者简介
Stoyan Stefanov:Facebook公司工程师、作家、演说家。他经常会在博客(www.phpied.com)上与一些相关会议中就Web开发话题发表独到见解。他还运营着其他一些网站,其中包括JSPatterns.com——一个专门探讨JavaScript模式的网站。Stoyan曾在Yahoo!公司任职,担任YSlow 2.0架构师职务,并且是图像优化工具Smush.it的作者。
Kumar Chetan Sharma原本一直致力于成为一个电子工程师,并梦想着打造一个终极音响系统。但由于一次偶然的机会,他得到了一份与HTML相关的兼职,然后自然地学习了CSS和JavaScript,从此便一发不可收拾。要知道在那个年代,JavaScript基本上还只能用来验证表单和制作一些奇特的DHTML效果,且IE6还在世界范围内独占鳌头。但就从那时起,他就已经在开发基于LAMP架构的Web应用了。从白色标签的社交网络应用,到为电信运营商制作的Web控制面板,再到联网的电子充电设备,都有他开发的身影。目前他在Yahoo!公司的搜索部门从事前端工程师的工作。
目录信息
1.1 回顾历史 2
1.2 浏览器的战争与复兴 3
1.3 分析现状 4
1.4 展望未来 5
1.5 ECMAScript 5 6
1.6 面向对象的程序设计 6
1.6.1 对象 7
1.6.2 类 8
1.6.3 封装 8
1.6.4 聚合 9
1.6.5 继承 9
1.6.6 多态 10
1.7 OOP小结 10
1.8 训练环境设置 11
1.8.1 WebKit所附带的Web审查工具 11
1.8.2 Mac上的JavaScriptCore 12
1.8.3 更多控制台 13
1.9 本章小结 15
第2章 基本数据类型、数组、循环及条件表达式 16
2.1 变量 16
2.2 操作符 19
2.3 基本数据类型 23
2.3.1 查看类型操作符—typeof 24
2.3.2 数字 24
2.3.3 字符串 29
2.3.4 布尔值 33
2.3.5 undefined与null 39
2.4 基本数据类型综述 41
2.5 数组 42
2.5.1 增加、更新数组元素 43
2.5.2 删除元素 44
2.5.3 数组的数组 44
2.6 条件与循环 45
2.6.1 if条件表达式 46
2.6.2 else语句 46
2.6.3 代码块 47
2.6.4 检查变量是否存在 48
2.6.5 循环 53
2.7 注释 58
2.8 本章小结 58
2.9 练习题 59
第3章 函数 61
3.1 什么是函数 62
3.1.1 调用函数 62
3.1.2 参数 63
3.2 预定义函数 64
3.2.1 parseInt() 65
3.2.2 parseFloat() 67
3.2.3 isNaN() 68
3.2.4 isFinite() 68
3.2.5 URI的编码与反编码 69
3.2.6 eval() 69
3.2.7 一点惊喜—alert()函数 70
3.3 变量的作用域 71
3.4 函数也是数据 73
3.4.1 匿名函数 75
3.4.2 回调函数 75
3.4.3 回调示例 77
3.4.4 即时函数 79
3.4.5 内部(私有)函数 80
3.4.6 返回函数的函数 81
3.4.7 能重写自己的函数 82
3.5 闭包 83
3.5.1 作用域链 84
3.5.2 利用闭包突破作用域链 85
3.5.3 getter与setter 91
3.5.4 迭代器 92
3.6 本章小结 93
3.7 练习题 93
第4章 对象 95
4.1 从数组到对象 95
4.1.1 元素、属性、方法与成员 97
4.1.2 哈希表、关联型数组 98
4.1.3 访问对象属性 98
4.1.4 调用对象方法 100
4.1.5 修改属性与方法 101
4.1.6 使用this值 102
4.1.7 构造器函数 102
4.1.8 全局对象 104
4.1.9 构造器属性 106
4.1.10 instanceof操作符 106
4.1.11 返回对象的函数 107
4.1.12 传递对象 108
4.1.13 比较对象 109
4.1.14 Webkit控制台中的对象 110
4.2 内建对象 111
4.2.1 Object 112
4.2.2 Array 113
4.2.3 Function 117
4.2.4 Boolean 124
4.2.5 Number 125
4.2.6 String 127
4.2.7 Math 132
4.2.8 Date 134
4.2.9 RegExp 139
4.2.10 Error对象 146
4.3 本章小结 149
4.4 练习题 150
第5章 原型 153
5.1 原型属性 154
5.1.1 利用原型添加方法与属性 154
5.1.2 使用原型的方法与属性 155
5.1.3 自身属性与原型属性 156
5.1.4 利用自身属性重写原型属性 158
5.1.5 isPrototypeOf()方法 162
5.1.6 神秘的__proto__链接 163
5.2 扩展内建对象 164
5.2.1 关于扩展内建对象的讨论 166
5.2.2 原型陷阱 167
5.3 本章小结 169
5.4 练习题 170
第6章 继承 171
6.1 原型链 171
6.1.1 原型链示例 172
6.1.2 将共享属性迁移到原型中去 175
6.2 只继承于原型 178
6.3 uber—子对象访问父对象的方式 181
6.4 将继承部分封装成函数 183
6.5 属性拷贝 185
6.6 请小心处理引用拷贝 187
6.7 对象之间的继承 190
6.8 深拷贝 192
6.9 object() 194
6.10 原型继承与属性拷贝的混合应用 195
6.11 多重继承 197
6.12 寄生式继承 199
6.13 构造器借用 200
6.14 本章小结 203
6.15 案例学习:图形绘制 206
6.15.1 分析 207
6.15.2 实现 207
6.15.3 测试 211
6.16 练习题 213
第7章 浏览器环境 215
7.1 在HTML页面中引入JavaScript代码 215
7.2 概述:BOM与DOM 216
7.3 BOM 217
7.3.1 window对象再探 217
7.3.2 window.navigator 218
7.3.3 控制台的备忘功能 219
7.3.4 window.location 219
7.3.5 window.history 221
7.3.6 window.frames 222
7.3.7 window.screen 223
7.3.8 window.open()/close() 224
7.3.9 window.moveTo()、window.resizeTo() 225
7.3.10 window.alert()、window.prompt()、window.confirm() 225
7.3.11 window.setTimeout()、window.setInterval() 227
7.3.12 window.document 229
7.4 DOM 229
7.4.1 Core DOM与HTML DOM 231
7.4.2 DOM节点的访问 233
7.4.3 DOM节点的修改 242
7.4.4 新建节点 245
7.4.5 移除节点 248
7.4.6 只适用于HTML的DOM对象 250
7.5 事件 254
7.5.1 内联HTML属性法 254
7.5.2 元素属性法 254
7.5.3 DOM的事件监听器 255
7.5.4 捕捉法与冒泡法 257
7.5.5 阻断传播 258
7.5.6 防止默认行为 260
7.5.7 跨浏览器的事件监听器 261
7.5.8 事件类型 262
7.6 XMLHttpRequest对象 263
7.6.1 发送请求 264
7.6.2 处理响应 265
7.6.3 在早于7的IE版本中创建XMLHttpRequest对象 266
7.6.4 A代表异步 267
7.6.5 X代表XML 267
7.6.6 实例示范 268
7.7 本章小结 270
7.8 练习题 272
第8章 编程模式与设计模式 274
8.1 编程模式 275
8.1.1 行为隔离 275
8.1.2 命名空间 278
8.1.3 初始化分支 281
8.1.4 惰性初始 282
8.1.5 配置对象 283
8.1.6 私有属性和方法 285
8.1.7 特权函数 286
8.1.8 私有函数的公有化 286
8.1.9 即时函数 287
8.1.10 模块 288
8.1.11 链式调用 289
8.1.12 JSON 290
8.2 设计模式 292
8.2.1 单件模式1 292
8.2.2 单件模式2 293
8.2.3 工厂模式 294
8.2.4 装饰器模式 296
8.2.5 观察者模式 299
8.3 本章小结 302
附录A 保留字 303
附录B 内建函数 307
附录C 内建对象 310
附录D 正则表达式 347
· · · · · · (收起)
读后感
用户评价
对于有一定JS基础的资深开发者而言,这本书的价值可能更多地体现在它对设计模式的深入探讨上。它没有像某些入门书籍那样简单罗列几种常见模式,而是系统性地展示了如何根据业务需求,选择和定制最合适的面向对象模式。例如,在处理数据流和状态管理时,工厂模式、单例模式以及观察者模式是如何协同工作的,书中都有非常详尽的流程图和代码实现作为佐证。特别是关于“依赖注入”在非强类型语言中如何优雅地实现这一点,提供了许多实用的技巧和权衡利弊的分析。我特别欣赏作者在讨论设计模式时,总是能将理论与实际性能考量联系起来,指出在某些情况下过度设计反而会带来不必要的开销。这种务实且深入的探讨,让这本书不仅仅是一本技术手册,更像是一本关于如何做出“正确技术决策”的参考书,对于提升架构能力大有裨益。
这本书最让我感到惊喜的是它对于JavaScript这种动态语言与传统面向对象范式之间张力的处理方式。它没有强迫我们像使用Java一样去使用JavaScript,而是智慧地利用了JS自身的特性(如闭包、高阶函数、Proxy对象等)来构建出符合OOP原则的健壮系统。书中对“装饰器模式”的讲解非常透彻,它展示了如何利用JS的函数特性,在不修改原有代码结构的情况下,动态地增强对象的行为,这在实现AOP(面向切面编程)时极为实用。对于那些认为OOP只适用于静态语言的开发者来说,这本书会提供一个全新的视角,证明了在JavaScript中构建可扩展、可维护的企业级应用,面向对象思维是多么强大而灵活的工具。这本书成功地架起了理论与实践之间的桥梁,是一本真正意义上的进阶指南。
这本书的排版和示例代码质量极高,这一点必须单独提出来表扬。代码块的格式清晰易读,注释恰到好处,没有冗余的废话,每一个示例都是为了阐明一个特定的设计点而精心构造的。在阅读那些涉及复杂继承链和高阶函数调用的部分时,清晰的格式避免了阅读疲劳和理解偏差。此外,作者在讲解完一个核心概念后,通常会设置一个“思考题”或者“挑战环节”,鼓励读者立即动手实践并思考边界情况。这种主动学习的机制,比被动地阅读和复制代码要有效得多。我发现,只有当我尝试自己去修改和扩展书中的示例代码时,那些关于封装性和多态性的理解才真正固化下来。这种注重实践的教学方式,是很多理论书籍所欠缺的。
这本关于JavaScript面向对象编程的指南,我抱着极大的期待去阅读,希望能系统地掌握现代JS开发中的核心范式。这本书的内容组织得非常清晰,从基础的概念出发,逐步深入到更复杂的模式和实践。初学者可能会发现它是一份非常宝贵的路线图,它不仅解释了“是什么”,更重要的是阐述了“为什么”要采用面向对象的方式来构建应用。书中对原型链和继承机制的讲解尤为到位,这在很多教程中往往是一笔带过或者讲解得过于理论化,但在这里,作者通过大量的实际代码示例,让抽象的概念变得触手可及。尤其是关于ES6之后类语法的引入和与传统原型继承的对比分析,帮助我彻底厘清了JS的底层运作逻辑,这对于编写可维护、高性能的代码至关重要。对于那些希望从脚本式编程转向结构化、大型应用开发的开发者来说,这本书无疑是极好的敲门砖。它强调的不仅仅是语法,更是思维模式的转变,这才是真正有价值的部分。
坦率地说,当我翻开这本书的第二版时,我立刻感受到了作者在内容更新上的用心。相较于上一版,这一版明显增加了对现代JavaScript生态中与OOP相关的最新特性的覆盖,比如模块化(ES Modules)如何与面向对象设计理念结合,以及在处理异步操作时,如何利用面向对象的设计来管理状态和流程。我对其中关于“组合优于继承”的论述印象非常深刻,作者不仅仅停留在理论层面,而是通过构建一个复杂的组件库案例,展示了如何使用混合(Mixins)和高阶组件(HOCs)等技术来实现更灵活的复用,这对于构建大型前端框架或应用架构非常有启发性。书中对设计原则(如SOLID原则)在JS环境下的具体应用场景进行了详尽的剖析,使得这些原本在Java或C#中常见的概念,能够在动态的JavaScript世界中找到坚实的落地之处。阅读完相关章节,我感觉自己的代码风格都有了质的飞跃,更倾向于编写具有良好内聚性和低耦合度的模块。
支持!因为是我自己翻译的……
面向对象讲的比较详细, 读完对javascript 的高级用法有点模糊的印象了
有基础 有深入 个人觉得前面几章有点太简单了
这周太闲居然看完了一本书 可以预感到有一大波需求正在酝酿中
太基础,后来者不如直接看《JavaScript高级程序设计》