问题描述
我想要一个JavaScript类,该类可以有条件地从单独的文件中向其自身添加其他方法。这个想法是将应用程序的不同关注点分为更易于管理的独立模块,这些模块仍然可以与母应用程序类中的方法进行交互。因此,单独文件中的其他方法必须能够引用主类中的方法和变量。请参见下面的代码示例。
我看过很多不同的解决方案,但是它们都不利于我想要的东西。
- 我可以做
new Uploads()
,但是找不到Uploads.js
中的方法引用主App
类中的方法的方式 - 我可以使用
extends
,但这不允许使用条件扩展名AFAIK - I could just define new methods into the prototype itself,但这意味着外部文件将需要“知道”将要使用的类,这并不能使其广泛地重复使用。
到目前为止,我拥有的最好的是:
app.js
const Uploads = require("./Uploads.js");
const config = { hasUploads: true }; // Probably loaded from a file
class App {
constructor() {
/* Only include the separate module if the config says so */
if(config.hasUploads) {
Object.assign(this,Uploads);
}
}
foo() {
/* Something */
}
}
Uploads.js
module.exports = {
bar() {
this.foo();
}
};
它有效,但是我不知道这是否是最佳解决方案;
- 没有构造函数,因此如果
Uploads.js
需要进行一些设置,则app.js
需要包含这样做的逻辑(或至少知道调用某些唯一命名的仿构造函数方法),似乎并不理想。 - 如果
Uploads.js
包含与app.js
同名的方法或正在加载的任何其他可能的模块,则它们将被覆盖,从而导致意外的行为。 -
Uploads.js
是函数的对象,而app.js
定义了一个类。为代码的可管理性,理想(尽管我想不一定),它们都应使用相同的语法。
是否有更好/更清洁/更精细的方法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)