gpt4 book ai didi

node.js - 在 node.js 中 require 如何与 new 运算符一起工作?

转载 作者:IT老高 更新时间:2023-10-28 23:07:20 26 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 - 在 node.js 中 require 如何与 new 运算符一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17604497/

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