gpt4 book ai didi

node.js - require 如何与 node.js 中的 new 运算符一起使用?

转载 作者:行者123 更新时间:2023-12-03 22:42:51 25 4
gpt4 key购买 nike

让我们使用以下代码创建一个 file.js:

module.exports.func = function(txt) {
this.a = 1;
this.b = 2;
console.log(txt, this);
return this;
}

现在我们有另一个 JS 文件,我们在其中执行以下操作:
var r1 = new (require('./file')).func('r1');
var r2 = new require('./file').func('r2');

在 r1 情况下,它按预期工作 - r1 包含对新创建对象的引用。

在 r2 的情况下它不起作用 - r2 从 file.js 中获取对 module.exports 的引用。

目的是通过调用 func() 构造函数来创建一个新对象。当然,我也可以这样做,这等于 r1:
var r3 = require('./file');
var r4 = new r3.func('r1');

但是,我不明白为什么 r2 的行为方式与 r1 不同。

require('./file') 周围的额外括号有何不同?

最佳答案

这两个版本根本不同。

这个:

new (require('./file')).func('r1');

执行 require,返回 ./file 的导出,然后对结果调用 new 运算符。

这个:
var r2 = new require('./file').func('r2');

调用 require 作为构造函数。

让我们看一个更孤立和简单的例子:
new Date() // creates a new date object
new (Date()) // throws a TypeError: string is not a function

关于node.js - require 如何与 node.js 中的 new 运算符一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24862316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com