我正在使用 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"});
最佳答案
这确实是一个观点问题,但有几个(大部分)客观的观点需要指出:
如果你这样做...
对象由
new
运算符创建,然后被丢弃(假设 V8 优化器不知道它可以跳过它)。您返回的
logger
不是Logger
类的实例(logger instanceof Logger
将为 false)。从构造函数返回一个对象以覆盖new
创建的对象的能力主要是为了返回由构造函数创建的先前实例,该实例相当于您所要求的实例(主要用于单例或不可变对象(immutable对象),以避免重复)。使用
new Logger
隐藏了这样一个事实:您返回的实际上是一个bunyan记录器,这可能会让维护代码的人失去兴趣。
您是否考虑这些“缺点”同样是一个观点问题。
另一种方法是让Logger
使用bunyan记录器,而不是直接返回它。如果您决定将来将 Bunyan 替换为其他东西,这也将具有封装它的优点。
关于javascript - 在构造函数中使用 return 来包装 Node 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27544784/