首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为包装节点模块使用返回构造函数

为包装节点模块使用返回构造函数
EN

Stack Overflow用户
提问于 2014-12-18 10:49:15
回答 1查看 231关注 0票数 0

我正在使用Node和ES6,并试图将一些Node模块封装到类中(在本例中是bunyan)。目标是统一我在应用程序中使用模块(包括我的模块和npm模块)的方式(不确定这是一件好事)。

我想出了一个工作解决方案,其中涉及类构造函数中的返回。但我不确定这是个好办法。有什么想法吗?

我正在做的事情是:

代码语言:javascript
复制
var bunyan = require('bunyan');

export default class Logger {

  constructor(options) {
    return bunyan.createLogger(options);
  }
};

所以我可以这样用它:

代码语言:javascript
复制
var logger  = new Logger({name: "server.js"});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-18 11:00:47

这确实是一个意见问题,但有几点(大部分)是客观的:

如果你这么做..。

  • 一个对象是由new操作符创建的,然后抛出(只要V8优化器不知道它可以跳过它)。
  • 您得到的logger不是Logger类的一个实例(logger instanceof Logger将是假的),这是相当误导的。从构造函数返回对象以覆盖new创建的对象的能力主要是返回由构造函数创建的前一个实例,该实例相当于您所要求的构造函数(主要是用于单件或不可变对象,以避免重复)。
  • 使用new Logger隐藏了这样一个事实,即您得到的实际上是一个bunyan记录器,它可以使维护代码的人放弃。

你是否考虑这些“缺点”,再一次,是一个意见问题。

另一种选择是Logger使用bunyan记录器,而不是直接返回它。如果您决定在未来将bunyan替换为其他东西,这也将具有封装它的优点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27544784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档