知识卡片

组合优先继承

普通读书笔记卡 · 1493.d

内容

部件模式把一种能力(如事件处理)封装成独立函数(如 eventuality),接收目标对象 that 并挂上 on/fire 方法和私有事件注册表;对象可在构造时调用任意多个部件函数组装行为,不被固定在单一继承树里。弱类型使这成为优势:无需考虑类型系统继承关系,只需关注具备哪些能力。发散:组合适合横向能力扩展(事件、日志、权限),比加深继承层级更抗变化。

参考来源

- 位置:《JavaScript语言精粹(修订版)》第5章《继承 Inheritance》"部件"一节 - 结论依据:原文给出 eventuality 函数示例,说明它可以"在任何单独的对象上调用……授予它事件处理方法",也可以在构造器函数返回前调用,并总结"一个构造器函数可以从一套部件中把对象组装出来",同时指出弱类型让开发者无须了解类型系统中的继承关系、只需专注个性特征,据此推出组合式的部件拼装优于单一继承树的结论。 - 原始内容:我们可以从一套部件中把对象组装出来……用这种方式,一个构造器函数可以从一套部件中把对象组装出来。JavaScript的弱类型在此处是一个巨大的优势,因为我们无须花费精力去了解对象在类型系统中的继承关系。相反,我们只需专注于它们的个性特征。