我在遇到这个被忽视的问题(例如它们之间有何不同?)时感到困惑?
Module.exports = {
search_companies(req, res) {
//some ops
},
get_details(req, res) {
//some ops
}
};
vs
class MainContrller {
search_companies(req, res) {
//some ops
},
get_details(req, res) {
//some ops
}
}
module.exports.MainController = MainController;
答案 0 :(得分:0)
第一个导出具有功能search_companies
和get_details
的对象。因此,您可以调用这些函数对导出的对象起作用。
第二个导出具有功能MainController
和search_companies
的类get_details
。在这里,您必须创建一个MainController
实例才能在该实例上调用这两个函数。
如果整个项目中只需要该对象的一个实例,则使用第一种语法。它就像单例或静态,但无需为其定义实际的类。
如果需要MainController
的多个不同实例,则使用第二个。
答案 1 :(得分:0)
应该按以下方式使用模块:
const { search_companies } = require('...');
应该像这样使用类:
const { MainController } = require('...');
const { search_companies } = new MainController();
MainController
在这种情况下是一种不好的做法,因为它模仿了其他语言中类的用法,而没有考虑到JavaScript的细节。
MainController
实例, this
不会从类中受益,并且在将类重构为单独的功能时不会失去功能。
在JavaScript中类不是美化的名称空间;已经有一些模块用于此目的。如果需要名称空间而无需类实例,则可以将模块用作经验法则。