Nodejs new require()

时间:2014-04-16 14:44:58

标签: javascript node.js webstorm

这两条线是否相同?

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

var myModule = require('my-module')

前者帮助intelliJ Idea(或Webstorm)对方法进行自动完成(例如"模型"在猫鼬中)(至少它没有显示恼人的黄色下划线,表示"未解决的功能或方法"

2 个答案:

答案 0 :(得分:4)

就JavaScript而言,它们不一样。以require()为功能? 看起来很,但我仍然建议不要这样做。

使用new可以做很多事情under the hood。使用require()会影响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:不要使用它。

答案 1 :(得分:4)

实例化 require返回的

当您实例化类或函数的新实例时,应使用

new,否则不应该使用<require。您几乎肯定不想实例化require的实例。

但是,如果要实例化 var myModuleInstance = new (require('my-module')); 返回的类/函数的实例,则可以执行以下操作:

require

额外包含括号表示您正在实例化返回的对象,而不是直接实例化{{1}}。