【问题标题】:Nodejs new require()Nodejs新的要求()
【发布时间】:2014-05-31 12:33:11
【问题描述】:

这两行是一样的吗?

var myModule = new require('my-module')

和:

var myModule = require('my-module')

前者帮助 intelliJ Idea(或 Webstorm)对方法(例如猫鼬中的“模型”)进行自动补全(至少它不会显示“未解决的函数或方法”的恼人的黄色下划线

【问题讨论】:

  • Trufa 我读过这个问题,我认为它比我的更具体。我只是想知道在任何情况下添加关键字“new”是否没有区别,仅此而已。
  • @arg20 你找到解决这个 IntelliJ/Webstorm 问题的另一种方法了吗?

标签: javascript node.js webstorm


【解决方案1】:

实例化 返回的内容 require

new 应在实例化类或函数的新实例时使用,否则不应使用。您几乎肯定不想实例化require 的实例。

然而,如果你想实例化一个类/函数的实例require返回,你可能会这样做:

var myModuleInstance = new (require('my-module'));

额外的包含括号意味着您正在实例化返回的对象,而不是直接实例化require

【讨论】:

    【解决方案2】:

    在 JavaScript 方面,它们不一样。就require() 作为函数而言? 看起来是这样,但我仍然建议不要这样做。

    使用new 可以做很多事情under the hoodrequire() 会受到new 的使用影响,因为this 的内部值会发生变化。

    var foo = {
        path: '/foo/bar/',
    
        require: function (module) {
            console.log(this.path + module);
        }
    };
    
    foo.require('baz'); // logs /foo/bar/baz
    new foo.require('trev'); // logs undefinedtrev
    

    目前require() 似乎根本不使用this(因为无论您是否更改此值,它的行为都不会改变)。但是,不保证将来会出现这种情况;它没有记录。

    TL;DR:不要使用它。

    【讨论】:

      猜你喜欢
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2017-11-23
      • 2015-01-16
      • 2021-01-31
      • 2021-12-26
      相关资源
      最近更新 更多