我正在使用Node和ES6,并试图将一些Node模块封装到类中(在本例中是bunyan)。目标是统一我在应用程序中使用模块(包括我的模块和npm模块)的方式(不确定这是一件好事)。
我想出了一个工作解决方案,其中涉及类构造函数中的返回。但我不确定这是个好办法。有什么想法吗?
我正在做的事情是:
var bunyan = require('bunyan');
export default class Logger {
constructor(options) {
return bunyan.createLogger(options);
}
};所以我可以这样用它:
var logger = new Logger({name: "server.js"});发布于 2014-12-18 11:00:47
这确实是一个意见问题,但有几点(大部分)是客观的:
如果你这么做..。
new操作符创建的,然后抛出(只要V8优化器不知道它可以跳过它)。logger不是Logger类的一个实例(logger instanceof Logger将是假的),这是相当误导的。从构造函数返回对象以覆盖new创建的对象的能力主要是返回由构造函数创建的前一个实例,该实例相当于您所要求的构造函数(主要是用于单件或不可变对象,以避免重复)。new Logger隐藏了这样一个事实,即您得到的实际上是一个bunyan记录器,它可以使维护代码的人放弃。你是否考虑这些“缺点”,再一次,是一个意见问题。
另一种选择是Logger使用bunyan记录器,而不是直接返回它。如果您决定在未来将bunyan替换为其他东西,这也将具有封装它的优点。
https://stackoverflow.com/questions/27544784
复制相似问题