【问题标题】:Is there a way to create a new Node object from a require in one line? [duplicate]有没有办法从一行中的需求创建一个新的 Node 对象? [复制]
【发布时间】:2018-02-14 23:55:13
【问题描述】:

我们有一个像这样导出的 Node.js 小部件:

module.exports = ourWidget;

然后我将它导入到我们的 server.js 中,如下所示:

var ourWidget = require('./ourWidget');
var ow = new ourWidget;

这按预期工作,但可以在一行中完成吗? EG:

var ow = new (require('./ourWidget'));

哪个不行,我也试过这个:

var ow = new (require('./ourWidget')());

这两者都类似于这个 SO 问题中的代码:How does require work with new operator in node.js?,但一旦我尝试运行代码,它们都会失败。

【问题讨论】:

标签: javascript node.js require


【解决方案1】:

您可以通过将函数调用转移到包装括号之外来实现这一点:

var ow = new (require('./ourWidget'))()

但请记住,您现在无法访问原始小部件构造函数(在您的情况下,这可能是坏事,也可能不是坏事)。

【讨论】:

  • 这是pretty much equivalent 到 OP 已经在使用的var ow = new (require('./ourWidget'))
  • 实际上对这种语法进行更改非常有效。谢谢!
  • @Bergi 不,当上面的答案使用 (require('foo')) 时,Op 正在使用 (require('foo')()) 并且您的评论使用 (require('foo)) () 。第一个执行require,你的根本不执行(只是包装对象)并且正确的方式执行包装的对象。 New 对结果进行操作。
  • @rainabba OP 写了“我也试过这个:var ow = new (require('./ourWidget')());”,但他们最初使用的是var ow = new (require('./ourWidget'));(或与临时的@987654326 相同) @ 多变的)。这相当于这个答案的建议。
  • @rainabba 不确定“只是包装对象”是什么意思。 new 不包装任何东西,它构造了一个操作数函数的实例。参数括号是可选的。
猜你喜欢
  • 2019-03-02
  • 2016-06-27
  • 1970-01-01
  • 2020-03-04
  • 2021-08-14
  • 1970-01-01
  • 2022-10-24
  • 2013-10-06
  • 2022-11-26
相关资源
最近更新 更多