有很多文章说在大多数情况下组合优于继承(Google:组合 vs 继承)。 我倾向于同意他们给出的论点。
如何将成员的所有函数公开为类自己的函数?
详细问题: 然而,我遇到了一个实用的地方,继承是首选,但由于基类的实现细节,这是不可能的。
假设我有
class class1 {
constructor(options) {
this.express = express();
}
my_function() {
// ...
}
}
let a = new class1();
有没有办法让所有的调用都有效:
a.my_function();
a.get(...);
a.post(...);
a.<ANY_OTHER_EXPRESS_STUFF_HERE>(...);
我目前的解决方案
a.my_function();
a.express.get(...);
a.express.post(...);
a.express.<ANY_OTHER_EXPRESS_STUFF_HERE>(...);
缺点: - 它很丑 - 我总是要通过“ express ”成员(member) - 用户应该知道哪些成员在哪里(哪些是本地的,哪些来自“基础”“类”)
限制:
- 不能从“express”继承,因为它不是一个类。
- 不能手动重写所有 express 函数(因为 1)它需要大量工作,2)它是带有类型 hell 的 typescript 3)express 会进化并添加东西,...)
- 它必须是类,我不能只将我的新成员注入(inject)现有的 express 应用程序,因为我的类的生命周期比包含的 express 实例更长,当没有 express 实例存在时,所有调用都应该抛出错误<
- 我是用 Typescript 写的,所以所有 Expess 函数的类型都应该保留。
最佳答案
在 typescript 中,定义你的类也有express的方法可能会很复杂。如果你想有一个例子,你可以看看我制作的 intl-ts 包,特别是 Intl class ,用自己的方法和用户定义的字典定义。
关于javascript - 如何将成员的所有函数公开为类自己的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52907663/