我正在玩Node和ES6,我正在尝试将一些Node模块包装成类(在本例中为bunyan)。我的目标是统一我在我的应用程序中使用模块(我和我的模块)的方式(不确定它是一件好事)。
我想出了一个包含类构造函数返回的工作解决方案。但我不确定这是一个很好的方法。有什么想法吗?
这就是我正在做的事情:
var bunyan = require('bunyan');
export default class Logger {
constructor(options) {
return bunyan.createLogger(options);
}
};
所以我可以这样使用它:
var logger = new Logger({name: "server.js"});
答案 0 :(得分:1)
这实际上是一个意见问题,但有几个(大部分)客观要点:
如果你这样做......
一个对象由new
运算符创建,然后被丢弃(假设V8优化器没有发现它可以跳过它)。
你回来的logger
是而不是 Logger
类(logger instanceof Logger
的一个实例,这是相当误导的假)。从构造函数返回对象以覆盖new
创建的对象的能力主要用于返回由构造函数创建的先前实例,该实例等同于您要求的实例(主要用于单例或不可变对象) ,以避免重复。)
使用new Logger
隐藏了这样一个事实,即你得到的东西实际上是一个bunyan记录器,这可能会让人们无法维护代码。
你是否考虑过这些" cons"是否是一个意见问题。
另一种选择是让Logger
使用一个bunyan记录器而不是直接返回它。如果你决定将bunyan换成其他东西,那么这也可以封装它。