javascript - require() 和 new require() 有什么区别?

标签 javascript node.js require

我的问题的核心是,有什么区别

var fs = new require('fs');

var fs = require('fs');

如果我对所有模块都使用 new 会有任何影响或注意事项吗?

在使用 Webstorm 时,我注意到只有使用 new require('fs') 才能让智能感知工作。在我开始持续使用它以获得更好的开发体验之前,我想了解更多关于它的信息。

最佳答案

首先:不要将 new require("...")(调用 require 作为构造函数)与 new (require("..."))(调用 require 调用的返回值 作为构造函数)。你正在做第一个。

require 不打算作为带有 new 的构造函数调用。这不是 Node 惯用的,而且通常很奇怪。你不应该这样做,因为它会降低代码的可读性。 future 的读者可能很容易将其误认为是 new (require("..."))(即,在由<返回的构造函数上调用 new/em> require), 因为正常的 Node 样式不使用 newrequire

现在,让我们谈谈实际的副作用。

new 导致函数运行其 [[Construct]] internal method ,它执行以下操作:

  • 调用函数时将 this 设置为新创建的对象,该对象的原型(prototype)设置为函数的 prototype 属性

  • 返回一个结果:

    • 如果函数返回一个对象,则返回函数的结果
    • 如果函数返回任何其他内容,则返回新创建的this对象

返回值 new require 将与所有 exports 值为非原始值的模块的 require 相同(这是真的几乎任何模块;它们通常导出一个普通对象或一个函数,这也是一种对象)。不过,在极少数情况下,您的模块确实会导出原始值,new 将拒绝您访问该值。

require(...)new require(...) 之间唯一可能的区别是 new 变体是提供了不同的 this 值。但是,require 似乎完全忽略了它的 this 值。 (请注意,Module.prototype.require —— 与普通 require 不同的函数 —— 确实使用了它的 this 值,但只有在你需要一个模块的子模块,使用 module.require(...) 。)

关于javascript - require() 和 new require() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787074/

相关文章:

node.js - 如何在 sendgrid v3 node.js 中向多个收件人发送电子邮件

javascript - 递归查找最接近的 package.json node.js

ruby - 需要不带 .rb 扩展名的 ruby​​ 文件?

javascript - 如何在 JavaScript 中动态创建数组/数组名

javascript - 如果我更改设备时间,如何获取实际的世界时间?

javascript - 如何在没有公共(public)列的两个表上使用 Nodejs 中的 Sequelize 进行 INNER JOIN?

javascript - 如何在node js中正确导出和require?

javascript - 将 mouseenter 事件更改为定时事件

javascript - Angular ui bootstrap typeahead荧光笔设计

javascript - 使用 Electron 的 native 拖放文件 uploader