您的浏览历史

JavaScript设计模式(JavaScript领域里程碑之作)

促销活动
  • [本书]参加人民邮电出版社满80元赠书活动
精彩评论

基本信息

编辑推荐

从这里开始,真正掌握JavaScript的精髓.
Google和Yahoo专家联手揭秘世界顶尖公司的技术内幕..
Amazon全五星盛誉图书...

推荐阅读
JavaScript开发技术大全..

市场价:¥99.80
4-5星价:¥76.85
[购买] [收藏]

内容简介回到顶部↑

本书共有两部分。第一部分给出了实现具体设计模式所需要的面向对象特性的基础知识,主要包括接口、封装和信息隐藏、继承、单体模式等内容。第二部分则专注于各种具体的设计模式及其在JavaScript 语言中的应用,主要介绍了工厂模式、桥接模式、组合模式、门面模式等几种常见的模式。为了让每一章中的示例都尽可能地贴近实际应用,书中同时列举了一些JavaScript 程序员最常见的任务,然后运用设计模式使其解决方案变得更模块化、更高效并且更易维护,其中较为理论化的例子则用于阐明某些要点。
本书适合各层次的Web 前端开发人员阅读和参考,也适合有C++/Java/C#背景的服务器端程序员学习。

作译者回到顶部↑

本书提供作译者介绍

Ross Harmes,资深Web程序员,有10多年编程经验。现任Yahoo前端工程师。他是开源图片博客软件Birch的开发者。Blog地址为Http://tecrhfoolery.com。

.. << 查看详细

作者: Ross Harmes
Ross Harmes,资深Web程序员,有10多年编程经验。现任Yahoo前端工程师。他是开源图片博客软件Birch的开发者。Blog地址为http://techfoolery.com。... << 查看详细

[同作者作品]
JavaScript设计模式(JavaScript领域里程碑之作)

作者: Dustin Diaz
Dustin Diaz,资深Web程序员,现任Google用户界面工程师。新一代JavaScript框架DED|Chain(兼具jQuery和YUI的优势)的开发者。他还是一位中长跑健将,800米跑曾经在全美国排名第13。拥有西班牙语学士学位。个人网站http://dustindiaz.com。..... << 查看详细

[同作者作品]
JavaScript设计模式(JavaScript领域里程碑之作)

目录回到顶部↑

第一部分 面向对象的JavaScript
 第1章 富有表现力的JavaScript
  1.1 JavaScript的灵活性
  1.2 弱类型语言
  1.3 函数是一等对象
  1.4 对象的易变性
  1.5 继承
  1.6 JavaScript中的设计模式
  1.7 小结
 第2章 接口
  2.1 什么是接口
   2.1.1 接口之利
   2.1.2 接口之弊
  2.2 其他面向对象语言处理接口的方式
  2.3 在JavaScript中模仿接口
   2.3.1 用注释描述接口
   2.3.2 用属性检查模仿接口
   2.3.3 用鸭式辨型模仿接口
  2.4 本书采用的接口实现方法
  2.5 Interface类

译者序回到顶部↑

设计模式对于程序员来说并不是一个陌生话题。在Erich Gamma等人合著的经典著作《设计模式》出版之后,十几年间陆续出现了许多这方面的专著。不过它们大都结合Java和C++等传统的面向对象语言进行讲解,而讲述设计模式在动态语言中的实现的书则较为罕见。在早期的JavaScript编程实践中,这种语言只被用于做点为网页涂脂抹粉的小差事;程序的规模很小,也很简单。那个时候恐怕没有人会想到把设计模式用到这种“玩具语言”编写的程序中。随着Ajax技术的兴起,Web应用的许多逻辑都从服务器端转移到客户端执行,客户端JavaScript程序的作用越来越重要,其规模和复杂程度也越来越大,人们也越来越多地把面向对象方法应用到JavaScript程序设计中。在此背景下,有许多人开始研究设计模式在JavaScript程序设计中的应用,网上也陆续出现了一些关于这个话题的零星讨论。但是到目前为止,系统地探讨面向对象的程序设计模式在JavaScript语言中的实现的书,只此一本。(Michael Mahemoff所著的《Ajax设计模式》一书总结的是运用Ajax技术开发Web应用的各种设计模式,虽然也涉及大量JavaScript编程,但它与本书关注的焦点不同。本书讨论的是一些通用的面向对象设计模式在JavaScript中的实现,属于更基础性的东西,它们不仅仅适用于Web客户端编程。).
JavaScript这种语言与Java等传统的面向对象语言有很大的不同。它的动态性、词法作用域和基于原型的继承机制等特点可能会让很多初次接触它的程序员都有点不习惯,而且由于语言设计上的一些不完善,许多在传统面向对象语言中只是举手之劳的事在JavaScipt中却不得不依靠hack手法来实现。这也许就是那些已经熟知设计模式在Java等语言中实现方式的程序员也需要本书的原因。本书第一部分着重讲述了面向对象技术在JavaScript中的实现方法。这对于对JavaScript只有过初步了解的人非常有用(当然,本书不适合对JavaScript一窍不通的读者。他们应该先找一本JavaScript基础教材来看看,比如人民邮电出版社出版的《JavaScript基础教程》)。Java和C++编程老手们在学完这部分内容之后,想必应该能够在JavaScript程序设计中自行应用各种经典的设计模式了。不过不同的人可能会有一些不同的做法,因此继续看看本书第二部分,借鉴一下作者的方法也不无益处。对于那些从未学过设计模式的JavaScript程序员来说,本书的重要性更是毋庸置疑。不过,坦率地说,要想深入学习设计模式仅看本书是不够的。取代Gamma等人的《设计模式》并不是本书的目标。..
就个人的感觉而言,我觉得本书最大的遗憾之处在于作者在讲述各种设计模式的实现时没有使用原型式继承,而是选择了类式继承。毕竟原型式继承才是JavaScript面向对象编程最自然的继承实现方式。不过正如作者所言,“有些人似乎天生就容易被原型式继承的简洁性吸引,而另一些人却对更面熟的类式继承情有独钟”,这只是个人口味的问题。考虑到很多人对原型式继承都非常陌生,作者的这种选择可以理解。
在本书的翻译过程中,我先后两次厚着脸皮向本书的执行编辑杨爽女士请求推迟交稿时间,她总是和颜悦色地告诉我:多花点时间不要紧,翻译质量才是最重要的。在此我要感谢杨爽女士的宽容,并感谢她和本书的文字编辑罗凌云女士认真负责的编辑工作。此外,李松峰、贺师俊、郭晓刚、刘江、麦天志、肖鹏、周琦、崔驰坤、米全喜、任斌、霍泰稳、张一宁和徐毅等朋友在本书的翻译过程中曾提供了许多宝贵意见,在此我一并表示感谢。由于我的水平有限,翻译不当之处在所难免。谨请各位读者朋友不吝赐教。建议您在图灵公司的网站(www.turingbook.com)或互动出版网(www.china-pub.com)上本书的网页上提出自己的意见。...
谢廷晟
2008年秋

前言回到顶部↑

目前,JavaScript到了一个转折关头。这门语言和它的用户都已经成熟起来。人们也开始认识到:它是一个复杂的课题,值得进一步研究。.
设计模式运用在程序设计中已经有些年头了。它们最早被整理记录于Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides〔绰号“四人帮”(the Gang of Four,后文中简写为Gof)〕合著的Design Patterns 一书中,现已被应用到各种各样的面向对象语言中。设计模式的魅力之一体现在它们被应用于各种语言和语法上时所表现出的一致性上。其基本结构是相同的,只是细节略有差别。例如,把一个用Java实现的模式转换为C++形式就很容易。
但是对JavaScript来说情况则有所不同。尽管所有那些能力JavaScript都有,但它们往往并非这种语言的正式部分,因而必须借助于一些晦涩的技巧和不那么直观的技术来模仿。这些年来,人们找到了许多方法用该语言来完成其设计者都未曾预计到的任务。那些常见的面向对象特性同样也要靠这样的手段实现。
本书收集整理了这些技巧和技术。第一部分提供了一个实现具体设计模式所需要的面向对象特性的基础。第二部分则专注于各种具体的设计模式及其在JavaScript语言中的应用。
为了让每一章中的示例都尽可能地贴近实际应用,我们花了不少心思。我们尽量列举一些JavaScript程序员最常见的任务,然后运用设计模式使其解决方案变得更模块化、更高效并且更易维护。而那些较为理论化的例子则用于阐明某些要点。我们知道,本书的价值最终将取决于它与你的日常工作和项目的紧密联系程度。
希望你能喜欢这本书。JavaScript是一种极其复杂而又灵活的语言,而且很适合于动手实践。你可以随时试试我们提供的示例代码。要是你找到实现某种设计模式的新方法,或者某种旧技术的新用途,请告诉我们一声。本书的附属网站http://jsdesignpatterns.com和Apress出版社的网站http://www.apress.com提供了更多信息以及可供下载的示例代码。
目标读者
本书主要面向两类读者。第一类读者是懂一点JavaScript并且想要加深对它的认识的Web开发人员或前端工程师,尤其是那些想要增进其对于JavaScript的面向对象能力的理解,学习如何提高其代码的模块化程度、可维护性和效率的人,他们可以从书中学到用JavaScript进行面向对象程序设计的基本知识,还能学到各种具体的设计模式,懂得应该在什么场合使用这些设计模式,以及如何实现它们。这类读者已经比较熟悉JavaScript的基本语法,他们会更多地关注那些关于如何按特定设计模式重构现有代码的部分,以及对于每种模式的适用场合的说明。
第二类读者是一些主要使用Java和C++等服务器端编程语言的程序员,相对而言,他们对JavaScript比较陌生,但又希望能把自己在设计模式和面向对象程序设计方面的知识应用到客户端程序设计中。他们可以从本书中学到如何在JavaScript中实现接口、继承和封装等常见的面向对象特性。这类读者会发现书中的代码尤其有用,因为他们可能不太熟悉JavaScript和其他面向对象语言在语法方面的差别。也许他们对各种具体的设计模式已经比较熟悉,所以本书讲述面向对象技术在JavaScript中的实现方法的第一部分对他们可能更有意义。
那些对JavaScript和面向对象程序设计都不太熟悉的读者可能很难看懂某些示例中的代码。这并不是一本入门级的书,它假定读者已经具备一定的程序设计知识。尽管如此,我们还是尽可能地使自己的讲解做到深入浅出,让不同层次的读者都易于理解。
本书结构
本书分为两部分。第一部分讲述JavaScript面向对象程序设计的基础知识,其中的各章应该按顺序阅读。每一章都建立在前面一章的基础上,并且假定你已经读过之前的各章。读者最好先通读这一部分的所有章节,因为第二部分的各章都要用到第一部分讲述的技术,而且有时不会再加以说明。
第二部分讲述具体的设计模式及其在JavaScript中的实际应用,其中的各章可以按任意顺序阅读。有些章引用了其他章的内容,被引用的内容既有第一部分的,也有第二部分的,我们都给出了引文的章号。
第一部分
第1章(富有表现力的JavaScript)揭示了JavaScript语言富有表现力的特点。从中你可以体会到,这种语言允许你用各种各样的编程风格来完成同样的任务,还允许你在面向对象编程的过程中借用函数式编程的概念来丰富其实现方式。这一章解释了究竟为什么应该使用设计模式,以及它们在JavaScript程序设计中的运用是如何使代码更高效、更易于处理的。
第2章(接口)分析了其他面向对象语言实现接口的方式,并用JavaScript对它们在这方面的最佳特性进行了模仿。文中探讨了接口检查的各种可行方式,并给出了一个可用来检查对象是否具有必要方法的可重用的类。
第3章(封装和信息隐藏)探讨了在JavaScript中创建对象的各种不同方式,以及每种方式中用以创建公用(public)、私用(private)和受护(protected)方法 的可行技术。文中还对经过复杂封装的对象的适用场合进行了讨论。..
第4章(继承)讲述了在JavaScript中用以创建子类的各种技术。其中既讲了类式继承,也讲了原型式继承,还说明了它们各自的适用场合。文中还讲述了掺元类(mixin class) ,以及如何用它替代多亲继承(multiple inheritance) 。
第5章(单体模式)讨论了JavaScript中的单体模式、命名空间、代码组织,以及可以用来根据运行时环境动态定义方法的分支技术(branching)。其中还谈到了工厂模式等可以受益于单体的模式。
第6章(方法的链式调用)考察了JavaScript对方法进行链式调用的能力,以及这种做法为什么能得到更清晰、简练的代码。文中用这种技术创建了一个小小的JavaScript库,并把其中的方法和没有利用链式调用技术实现的对应方法进行了比较。

媒体评论回到顶部↑

“本书道前人所未道,引导你从编写代码进化为设计代码。书中绝大部分示例代码都来自YUI等实战项目,并进行了深入剖析。强烈推荐。”
            ——Nicholas C.Zakas,著名JavaScript专家,Yarl00前端工程师,畅销书《JavaScript高级程序设计》作者
  “毫不夸张地说,这是我有生以来读到的最好的一本JavaScript图书。作者讲授了大量独门的专家经验。”
            ——Mostafa Farghaly,埃及程序员

评论交流

共有28人开贴评论  66人参与评论  18人参与打分 查看

10人
 55%
用户平均打分
我要写评论 help如何参与评论和打分
7人
 38%
1人
 5%
0人
 0%
0人
 0%

siginie
一级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2009-10-24 9:56:00
含金量很高的Javascript技术书籍,虽然我的工作已经接触到了很多种JS的模式,但是书中列举的模式更多更详细。虽然有些在词汇上产生一些错误,但无大碍。
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

fdu_wayto
一级评论员
该会员在china-pub购买过此书 精彩书评
评价等级:  
发表于:2009-9-18 14:30:00
乍看只是很薄的一本书.不过仔细读来,感觉比多数同类书有价值得多,首先,常用的几种设计模式在JS这种特殊的(动态、脚本、弱类型、原型化对象)语言中如何应用,这本身就值得书价了。另外还有很多技巧性的代码片段,让我这样的中级JS学习者受益匪浅。
您觉得呢? 送鲜花 (得1支)  扔鸡蛋 (得0个)

Renart

专家级评论员
  
发表于:2009-4-30 17:43:00
尽管本书作者仅仅满足于用JavaScript实现一些经典的设计模式,对JavaScript作为一种动态语言而特有的设计模式探讨得不够,但是作为第一本教授JavaScript设计模式的书,它填补了编程图书市场中的一片空白。在JavaScript程序设计工作中有意大规模采用面向对象方法的程序员都应该好好看一下这本书。

这本书的英文版和中文版我都看过。作者是两个粗心的家伙;原著中存在大量错误。很高兴看到其中许多错误已经被译者纠正。不过作为一个好挑毛病的读者,我发现中文版的翻译和代码仍然存在一些问题。这里把一些重要的问题公布出来(那些比较琐碎的笔误我就不提了)。希望译者和编辑以后的工作能再仔细一点。

一. 翻译问题

1. 49页倒数9行,“只有那些通用到足以使其在彼此大不相同的各种类中都能派上用场的方法才适合于共享”这句话中的“足以使其”四字极其啰嗦,应该删去。

2. 79页12行的“这个函数应该能接受元素数组形式的参数”这句译错了。原文是“You also want the dollar function to be able to take in an array of elements, ...”。这里的“array”不应该理解为“数组”,而应该理解为“一批”,这是因为$函数的参数可以是一个或多个元素的id或引用,但并不接受数组形式的参数。所以这句话应该改译“这个函数应该能以一批元素为参数”。

3. 117页2行的“所以单单save或validate函数是不可能满足每一个人的需要的”译错了。原文是“so you cannot have a single save or validate function that will work for everyone”。意思是说“不存在一个能满足所有人需要的save或validate函数”。原译的意思却是“要满足每一个人的需要仅仅有save或validate函数是不够的”。可以考虑改为“所以不存在一个老少咸宜的save或validate函数”。

(未完待续)
回复 ( 6条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得7支)  扔鸡蛋 (得0个)

DreamCat
一级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2009-3-24 11:21:00
书在下定单后,三天后收到!书不同,与以前不同的编程方式,带给人眼前一亮的感觉,虽然只翻看了前两章,感觉这本书是不错的进阶学习书,当然需要有一些Javascript的基础的
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

winnersong
一级评论员
评价等级:  
发表于:2008-12-14 23:32:00
书到手了,粗略的看了下,翻译的质量不敢恭维啊
比如将mixin class翻译成 "掺元类",singleton翻译成"单体",private翻译成"私用"...敢问译者平时是否对其他语言有所了解?
回复 ( 8条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得5支)  扔鸡蛋 (得0个)
我要写评论
查看所有评论交流(共28条)