代码改变世界

随笔分类 - [07]Web开发

新书《编写可测试的JavaScript代码 》出版,感谢支持

2015-02-02 09:00 by 汤姆大叔, 8014 阅读, 收藏, 编辑
摘要:本书介绍JavaScript专业开发人员必须具备的一个技能是能够编写可测试的代码。不管是创建新应用程序,还是重写遗留代码,本书都将向你展示如何为客户端和服务器编写和维护可测试的JavaScript代码。从减少代码复杂性的方法,到单元测试、代码覆盖率、调试、以及自动化,您将全面学到如何编写让你和你同事... 阅读全文

MVC之前的那点事儿系列(1):进入CLR

2014-05-28 13:12 by 汤姆大叔, 14067 阅读, 收藏, 编辑
摘要:MVC之前的那点事儿系列,是笔者在2012年初阅读MVC3源码的时候整理的,主要讲述的是从HTTP请求道进入MVCHandler之前的内容,包括了原创,翻译,转载,整理等各类型文章,当然也参考了博客园多位大牛的文章,对此表示感谢,这次有时间贴出来,希望对大家有用。主要内容本文讲解的是:服务器接受Ht... 阅读全文

《深入理解Bootstrap》勘误

2014-05-25 09:34 by 汤姆大叔, 9557 阅读, 收藏, 编辑
摘要:感谢大家感谢大家仔细阅读本书,并给本书指出了那么多的错误,下次重印时,一定会修正。勘误列表ID发行人章节原文更新文备注1剑衣清风(微博)1.5选择器(p7)[att$=value] 该属性的值必须包含特定值(而无论其位置怎么样)。[att*=value] 该属性的值必须以特定值结束 。[att$=v... 阅读全文

全球第一本基于Bootstrap V3.x的图书《深入理解Bootstrap》终于上市了,再次免费送书15本【活动结束】

2014-05-23 08:58 by 汤姆大叔, 34694 阅读, 收藏, 编辑
摘要:先说活动规则,再说书的事经过将近1年的努力,终于有了第一本自己独立编写的书:《深入理解Bootstrap》,基于最新版V 3.1 ,侧重于源码详解、架构分析、插件扩展(全新开发)实战。为了感谢大家以往依赖的支持,所以再次来个大放送,15个名额,具体活动内容和规则如下:活动1:博客园回帖送书规则:5月... 阅读全文

初中级Web开发人员的福音:《JavaScript启示录》上市了

2014-03-07 09:00 by 汤姆大叔, 16984 阅读, 收藏, 编辑
摘要:经历过14个月的等待,本书终于上市了,完全口语化叙述,请参考右边的链接。本书介绍本书无关于JavaScript设计模式,也无关于JavaScript面向对象代码实现。本书的写作目的也不是鉴别JavaScript语言特点的好坏。本书并不是一本完整的参考指南。它面向的读者人群并不是编程新手或对JavaS... 阅读全文

新书《JavaScript设计模式 》出版,感谢支持

2013-06-14 09:58 by 汤姆大叔, 14257 阅读, 收藏, 编辑
摘要:小记这本书的出版得益于人民邮电出版社陈冀康编辑的推荐,加上之前博客又翻译了一些原作者的文字,所以就承担了该书的翻译工作,不同于博客的是,由于设计模式本身就难以表达,加上英文版有很多错误(评价不佳),原本年初就可以出版的书,一直等到5月份原作者更新最完善版本以后,前后进行了5次译稿校对,才得以出版,再次感谢作为专业翻译媳妇的帮忙和编辑的耐心。本书介绍设计模式是解决软件设计中常见问题的可复用方案。学习任何编程语言,设计模式都是一个令人兴奋和极具吸引力的话题。本书是JavaScript编程设计模式的学习指南。全书分为14章。首先介绍了什么是模式、模式的结构、类别、模式的分类、如何编写模式等等;然后, 阅读全文

《JavaScript编程精解》回馈网友,汤姆大叔送书30本

2012-10-22 09:37 by 汤姆大叔, 34402 阅读, 收藏, 编辑
摘要:前言在博客园网友的大力支持下,大叔第一本翻译的书《JavaScript编程精解》终于出版了。第一次阅读这本书的时候,就深深地喜欢上了本书的写作风格。游戏式的章节,完整且连贯的故事,使我在阅读过程中真正有了读书的快感。不同于其他的JavaScript书籍,本书没有列表式的数据类型讲解,也没有枯燥的概念和老掉牙的例子,更没有流行的Ajax专题;本书通过设计一个个由浅入深的小游戏,让读者更加深入而轻松地学习如何应用JavaScript编程技术。因此,建议读者在阅读过程中,每次都进行一个完整章节的阅读,以便更好地理解编程故事的情节。翻译过程中,除了对JavaScript语言本身有了深刻理解之外,从这本 阅读全文

《JavaScript编程精解》勘误

2012-10-21 21:21 by 汤姆大叔, 8820 阅读, 收藏, 编辑
摘要:感谢所有提供本书错误的网友。ID页码勘误内容致谢网友169replacce应为replacemyunlessor287var pushX = bind(testArray.push, testArray); 修改为var pushX = bind(x.push, x);myunlessor395代码中else if 缩进格式有误 myunlessor4162第一段后半句:如果传入了第三个参数(回调函数)可以在其中处理非200状态码的错误状况 myunlessor56789 阅读全文

深入理解JavaScript系列(48):对象创建模式(下篇)

2012-04-26 08:46 by 汤姆大叔, 13454 阅读, 收藏, 编辑
摘要:介绍本篇主要是介绍创建对象方面的模式的下篇,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码。模式6:函数语法糖函数语法糖是为一个对象快速添加方法(函数)的扩展,这个主要是利用prototype的特性,代码比较简单,我们先来看一下实现代码:if (typeof Function.prototype.method !== "function") { Function.prototype.method = function (name, implementation) { this.prototype[name] = implementation; r... 阅读全文

深入理解JavaScript系列(47):对象创建模式(上篇)

2012-04-25 08:49 by 汤姆大叔, 15398 阅读, 收藏, 编辑
摘要:介绍本篇主要是介绍创建对象方面的模式,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码。模式1:命名空间(namespace)命名空间可以减少全局命名所需的数量,避免命名冲突或过度。一般我们在进行对象层级定义的时候,经常是这样的:var app = app || {};app.moduleA = app.moduleA || {};app.moduleA.subModule = app.moduleA.subModule || {};app.moduleA.subModule.MethodA = function () { console.log("print A&quo 阅读全文

深入理解JavaScript系列(46):代码复用模式(推荐篇)

2012-04-24 08:38 by 汤姆大叔, 20345 阅读, 收藏, 编辑
摘要:介绍本文介绍的四种代码复用模式都是最佳实践,推荐大家在编程的过程中使用。模式1:原型继承原型继承是让父对象作为子对象的原型,从而达到继承的目的:function object(o) { function F() { } F.prototype = o; return new F();}// 要继承的父对象var parent = { name: "Papa"};// 新对象var child = object(parent);// 测试console.log(child.name); // "Papa"// 父构造函数function Person() 阅读全文

深入理解JavaScript系列(45):代码复用模式(避免篇)

2012-04-23 08:02 by 汤姆大叔, 15622 阅读, 收藏, 编辑
摘要:介绍任何编程都提出代码复用,否则话每次开发一个新程序或者写一个新功能都要全新编写的话,那就歇菜了,但是代码复用也是有好要坏,接下来的两篇文章我们将针对代码复用来进行讨论,第一篇文避免篇,指的是要尽量避免使用这些模式,因为或多或少有带来一些问题;第二排是推荐篇,指的是推荐大家使用的模式,一般不会有什么问题。模式1:默认模式代码复用大家常用的默认模式,往往是有问题的,该模式使用Parent()的构造函数创建一个对象,并且将该对象赋值给Child()的原型。我们看一下代码:function inherit(C, P) { C.prototype = new P();}// 父构造函数funct... 阅读全文

深入理解JavaScript系列(44):设计模式之桥接模式

2012-04-19 07:08 by 汤姆大叔, 13965 阅读, 收藏, 编辑
摘要:介绍桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化。正文桥接模式最常用在事件监控上,先看一段代码:addEvent(element, 'click', getBeerById);function getBeerById(e) {var id = this.id;asyncRequest('GET', 'beer.uri?id=' + id, function(resp) {// Callback response.console.log('Requested Beer: ' + resp.respon 阅读全文

深入理解JavaScript系列(43):设计模式之状态模式

2012-04-18 06:56 by 汤姆大叔, 12892 阅读, 收藏, 编辑
摘要:介绍状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类。正文举个例子,就比如我们平时在下载东西,通常就会有好几个状态,比如准备状态(ReadyState)、下载状态(DownloadingState)、暂停状态(DownloadPausedState)、下载完毕状态(DownloadedState)、失败状态(DownloadFailedState),也就是说在每个状态都只可以做当前状态才可以做的事情,而不能做其它状态能做的事儿。由于State模式描述了下载(Download)如何在每一种状态下表现出不同的行为。这一模式的关键思想就是引入了一个叫做 阅读全文

深入理解JavaScript系列(42):设计模式之原型模式

2012-04-16 09:11 by 汤姆大叔, 12890 阅读, 收藏, 编辑
摘要:介绍原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象。正文对于原型模式,我们可以利用JavaScript特有的原型继承特性去创建对象的方式,也就是创建的一个对象作为另外一个对象的prototype属性值。原型对象本身就是有效地利用了每个构造器创建的对象,例如,如果一个构造函数的原型包含了一个name属性(见后面的例子),那通过这个构造函数创建的对象都会有这个属性。在现有的文献里查看原型模式的定义,没有针对JavaScript的,你可能发现很多讲解的都是关于类的,但是现实情况是基于原型继承的JavaScript完全避免了类(class)的概念。我们 阅读全文

深入理解JavaScript系列(41):设计模式之模板方法

2012-04-13 09:04 by 汤姆大叔, 9611 阅读, 收藏, 编辑
摘要:介绍模板方法(TemplateMethod)定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方法导致一种反向的控制结构,这种结构就是传说中的“好莱坞法则”,即“别找找我们,我们找你”,这指的是父类调用一个类的操作,而不是相反。具体体现是面向对象编程编程语言里的抽象类(以及其中的抽象方法),以及继承该抽象类(和抽象方法)的子类。正文举个例子,泡茶和泡咖啡有同样的步骤,比如烧开水(boilWater)、冲泡(brew)、倒在杯子里( 阅读全文

深入理解JavaScript系列(40):设计模式之组合模式

2012-04-12 08:35 by 汤姆大叔, 12228 阅读, 收藏, 编辑
摘要:介绍组合模式(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。常见的场景有asp.net里的控件机制(即control里可以包含子control,可以递归操作、添加、删除子control),类似的还有DOM的机制,一个DOM节点可以包含子节点,不管是父节点还是子节点都有添加、删除、遍历子节点的通用功能。所以说组合模式的关键是要有一个抽象类,它既可以表示子元素,又可以表示父元素。正文举个例子,有家餐厅提供了各种各样的菜品,每个餐桌都有一本菜单,菜单上列出了该餐厅所偶的菜品,有早餐糕点、午餐、晚餐等等,每个餐都有各种各样 阅读全文

深入理解JavaScript系列(39):设计模式之适配器模式

2012-04-11 09:16 by 汤姆大叔, 13919 阅读, 收藏, 编辑
摘要:介绍适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性),适配器模式使得原本由于接口不兼容而不能一起工作的那些类(对象)可以一些工作。速成包装器(wrapper)。正文我们来举一个例子,鸭子(Dock)有飞(fly)和嘎嘎叫(quack)的行为,而火鸡虽然也有飞(fly)的行为,但是其叫声是咯咯的(gobble)。如果你非要火鸡也要实现嘎嘎叫(quack)这个动作,那我们可以复用鸭子的quack方法,但是具体的叫还应该是咯咯的,此时,我们就可以创建一个火鸡的适配器,以便让火鸡也支持quack方法,其内部还是要调用gobble。OK,我们开 阅读全文

深入理解JavaScript系列(38):设计模式之职责链模式

2012-04-10 08:55 by 汤姆大叔, 11036 阅读, 收藏, 编辑
摘要:介绍职责链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。也就是说,请求以后,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。提交请求的对象并不明确知道哪一个对象将会处理它——也就是该请求有一个隐式的接受者(implicit receiver)。根据运行时刻,任一候选者都可以响应相应的请求,候选者的数目是任意的,你可以在运行时刻决定哪些候选者参与到链中。正文对于JavaScript实现,我们可以利用其原型特性来 阅读全文

深入理解JavaScript系列(37):设计模式之享元模式

2012-04-09 08:46 by 汤姆大叔, 14108 阅读, 收藏, 编辑
摘要:介绍享元模式(Flyweight),运行共享技术有效地支持大量细粒度的对象,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生产大量细粒度的类实例来表示数据,如果能发现这些实例除了几个参数以外,开销基本相同的 话,就可以大幅度较少需要实例化的类的数量。如果能把那些参数移动到类实例的外面,在方法调用的时候将他们传递进来,就可以通过共享大幅度第减少单个实例 的数目。那么如果在JavaScript中应用享元模式呢?有两种方式,第一种是应用在数据层上,主要是应用在内存里大量相似的对象上;第二种是应用在DOM层上,享元 阅读全文