摘要: 概述 在之前的文章中,我们借助构造函数实现了“类”,然后结合原型对象实现了“继承”,并了解了JavaScript中原型链的概念。 理解这些内容,有助于我们更深入地进行JavaScript面向对象编程。 由于JavaScript是一门基于对象和原型的弱语言,灵活度非常高,这使得JavaScript有各种套路去实现继承。本篇文章将逐一介绍实现继承的12种套路,它们可以适用于不同的场景,总一种套路适合你... 阅读全文
posted @ 2016-06-16 21:51 keepfool 阅读(2176) 评论(7) 推荐(30) 编辑
摘要: 概述 上一篇我们介绍了通过构造函数和原型可以实现JavaScript中的“类”,由于构造函数和函数的原型都是对象,所以JavaScript的“类”本质上也是对象。这一篇我们将介绍JavaScript中的一个重要概念原型链,以及如何经原型链实现JavaScript中的继承。 C#的继承 首先,我们简单描述一下继承的概念:当一个类和另一个类构成"is a kind of"关系时,这两个类就构成了继承关... 阅读全文
posted @ 2016-06-10 07:18 keepfool 阅读(6523) 评论(32) 推荐(73) 编辑
摘要: 概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象、类、封装、继承、多态。对象和类是面向对象的基础,封装、继承和多态是面向对象编程的三大特性。 JavaScript提供了对象却缺乏类,它不能像C#一样能显式地定义一个类。但是JavaScript的函数功能非常灵活,其中之一就是构造函数,结合构造函数和原型对象可以实现”类”。 对象和类的概念 对象 “对象”是面向对象编程... 阅读全文
posted @ 2016-06-07 22:07 keepfool 阅读(2228) 评论(14) 推荐(24) 编辑
摘要: 概述 在JavaScript中,我们可以使用函数、数组、对象,以及日期、正则等一些内置类型的实例,它们都是复杂类型的表现。从本质上讲,这些复杂类型都是Object类型。本篇将主要介绍三种Object类型的体现:函数、数组和对象。 函数 函数是JavaScript的一大重点,它非常的灵活。不像C#这种强类型语言,可以显式地声明"class",JavaScript没有"class"的概念,但借助函数我... 阅读全文
posted @ 2016-06-06 07:14 keepfool 阅读(2096) 评论(12) 推荐(31) 编辑
摘要: 前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的、处理一些事件的。我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统的。 编程语言和技术的结合使用,就像一个男人娶了好几个妞一样。在旧的时代,.NET是大房,JavaScript是偏房。大房是“后宫之主”,不仅要操持家业,还能给你生娃,娃将来也要继承家业的。偏房就没那... 阅读全文
posted @ 2016-06-04 23:41 keepfool 阅读(2577) 评论(10) 推荐(23) 编辑
摘要: 《小酌重构系列》是我在博客园的第一个系列文章,这个系列历时一个多月终于完成了。写这个系列的初衷是为了团队培训,为什么要做这个培训呢? 是因为在项目的开发过程中,我们遭遇了一些“代码的痛苦”。 写代码是程序员的基本工作,但写出好的代码不是一件容易的事情。 写不出好的代码,就可能产生痛苦。代码的痛苦包含哪些方面呢?一般来说,包括... 阅读全文
posted @ 2016-06-02 07:17 keepfool 阅读(1220) 评论(5) 推荐(18) 编辑
摘要: 当方法返回类型或属性类型为集合时,有些开发者会千篇一律地使用IList<T>集合。然而IList<T>具有集合的所有操作,这意味着调用者不仅可以读取集合信息,还能够修改集合。业务需求本来只是为调用者提供一个可读的集合,例如数据的查询和展示,但当方法返回IList<T>时,无疑隐式地开放了集合可写的权限。此时,我们无法阻止调用者篡改集合元素。这种情况下,我们应该使用IEnumerable<T>来代替IList<T>。 阅读全文
posted @ 2016-06-01 07:13 keepfool 阅读(1509) 评论(7) 推荐(13) 编辑
摘要: 当条件判断语句较为复杂时(有多个不同的检查项),会使得代码的可读性会大打折扣,也难以清晰地传达判断意图。再者,当判断逻辑变更时,我们不得不去修改if语句里面的判断代码。 我们可以根据检查项是否需要参数来封装条件,如果检查项不需要参数,则可以将其提取为属性;如果需要参数,则将其提取为方法。 本文要讲的重构策略“封装条件”是基于“提取方法”这个重构策略的。 阅读全文
posted @ 2016-05-31 22:16 keepfool 阅读(1344) 评论(2) 推荐(6) 编辑
摘要: 阅读文章时,如果某个段落已经传达了关键信息,我们可能就不会逐字逐句地将文章读完,因为我们已经知道了这篇文章的核心内容。 与此类似,如果方法中某些条件判断可以得到结果,我们应该尽快返回该结果。 尽快返回可以带来三个好处:1. 节省阅读代码的时间 2. 避免执行无效的逻辑 3. 增强代码的可读性 阅读全文
posted @ 2016-05-31 07:04 keepfool 阅读(1265) 评论(4) 推荐(8) 编辑
摘要: 在自然语言中,双重否定表示肯定。但是在程序中,双重否定会降低代码的可读性,使程序不易理解,容易产生错觉。 人通常是用“正向思维”去理解一件事情的,使用双重否定的判断,需要开发者以“逆向思维”的方式去理解它的含义。 另外,在写程序时,"!"符号很容易被疏忽和遗漏,一不小心则会编写出错误的代码,从而产生bug。 所以,在程序中,我们应当尽量避免使用双重否定。 阅读全文
posted @ 2016-05-30 22:10 keepfool 阅读(1507) 评论(3) 推荐(8) 编辑