javascript - 在构造函数中使用 return 来包装 Node 模块

标签 javascript node.js ecmascript-6

我正在使用 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/

相关文章:

http - 模拟 HTTP 响应以测试 node.js HTTP 客户端

javascript - 为什么我在一条路线上没有得到 req.body ? Node JS

javascript - 在构造函数中初始化状态时出现意外标记

javascript - View 下的文件无法在Grails中访问

javascript - 如何在Metro风格应用中实现滑动页面过渡

javascript - 只需要 Promise 同步性返回,而不是使用 '.then' 时的值

javascript - 如何将 Javascript 变量集成到 ReactJS JSX 样式元素中

json - 无法让 xlsx 到 JSON 转换器在 Node/Express 中正常工作

javascript - lodash 检查对象属性是否有值

html - 如何隐藏一个div并将其替换为reactjs中的另一个div?