Nodejs 新的 require()

arg*_*g20 5 javascript node.js webstorm

这两行是一样的吗?

var myModule = new require('my-module')
Run Code Online (Sandbox Code Playgroud)

和:

var myModule = require('my-module')
Run Code Online (Sandbox Code Playgroud)

前者帮助intelliJ Idea(或Webstorm)对方法(例如猫鼬中的“模型”)进行自动完成(至少它没有显示令人讨厌的黄色下划线,上面写着“未解决的函数或方法”

Jas*_*son 5

实例化什么的回来 require

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

但是,如果您想实例化由 返回 的类/函数的实例require,您可能会执行以下操作:

var myModuleInstance = new (require('my-module'));
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*att 4

就 JavaScript 而言,它们并不相同require()就函数而言?看起来是这样,但我仍然建议不要这样做。

使用在幕后new做了很多事情。会受到 的使用的影响,因为它的内部值会发生变化。require()newthis

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
Run Code Online (Sandbox Code Playgroud)

目前require()似乎根本不使用this(因为无论您是否更改此值,它的行为都不会改变)。然而,并不能保证将来也是如此。它没有记录。

TL;DR:不要使用它。