代码复用模式(Code Reuse Patterns)
代码复用是一个重要而且有趣的话题,因为应该尽量少写代码而尽可能的复用现有的代码——你或者其他人已经写好的代码。尤其是好的,测试过的,可维护的,可扩展的并且有文档的代码。
当谈论代码复用的时候,心中想的的第一件是就是继承(inheritance),接下来有很多内容专注于这个主题。你将会看到一些方法去实现经典(Classical)继承和非经典(nonclassical)继承。
但我们要在心中记住最终目标是很重要的:我们想复用代码。继承对我们来说是一种可以实现这个目标办法,但它不是唯一的方法。你将会看到如何使用其它对象组合一个对象,如何将对象混合在一起,如何仅仅借用和复用你需要的函数,而且永远不会继承任何东西。
当我们解决代码复用任务时,在心中记住四人帮的书中为对象创建提出的意见:优先使用组合而不是继承(Prefer object composition to class inheritance)
经典VS现代继承模式(Classical Versus Modern Inheritance Patterns)
你常常听到术语“经典继承(classical inheritance)”在关于JavaScript继承的主题的讨论中,那么让我们首先解释一下经典(classical inheritance)的意思。
这个词语的重点是"类"(class)。
大多数编程语言都有类的概念作为对象的原型。在这些语言中,每一个对象都是一个类的实例(比如,在Java中)并且一个对象不可能被创建如果它的类不存在。
在JavaScript中,没有类,类的实例这种概念没有任何意义。对象在JavaScript中对象就是简单的键-值对,你可以在创建之后立马改变它们。
但是JavaScript有构造函数(constructor functions),并且new操作符的语法和很多使用类的语法类似。
在Java中你可以像下面这样:
Person adam = new Person();
在JavaScript中你可以这样:
var adam = new Person();
不同的之处,Java是强类型的并且你需要声明adam是Person类型,语法看起来一模一样。
JavaScript的构造函数调用看起来好像Person就是一个类,但在心中记住Person仍然仅仅是一个函数是很重要的。
这个在语法上的相似性已经让很多程序猿从类的角度来思考JavaScript,发展思维,并且继承假定有类的模式。这些实现我们叫它"经典继承"(classical)。
我们说的"现代继承"(modern)是其它模式,那些不需要你考虑类(class)的模式。
当开始为你的项目采用继承模式时,你有很多选择。你应该始终优先采用现代模式,除非团队在没有类参与的话真的不舒服。
后面我们会讨论先讨论经典模式然后到现代模式。
-------------------------------------------------------------------------------------------------------------------------------