通过子类工厂实现简单的合成器

Tags
javascript
Created
Jun 1, 2016 2:09 AM

当 ES6 类继承另一个类,被继承的类可以是通过任意表达式创建的动态类:

// Function id() simply returns its parameter
const id = x => x;
class Foo extends id(Object) {}

这个特性可以允许你实现一种合成器模式,用一个函数来将一个类 C 映射到一个新的继承了 C 的类。例如,下面的两个函数 Storage 和 Validation 是合成器:

const Storage = Sup => class extends Sup {
  save(database) { ··· }
};
const Validation = Sup => class extends Sup {
  validate(schema) { ··· }
};

你可以使用它们去组合生成一个如下的 Employee 类:

class Person { ··· }
class Employee extends Storage(Validation(Person)) { ··· }

更多信息:

SuperMade with Super