让我们使用以下代码创建一个 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') 周围的额外括号有何不同?