让我们来一个带有以下代码的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');
执行需求,返回的输出,./file然后 对结果 调用新的运算符。
./file
var r2 = new require('./file').func('r2');
调用需要作为构造函数。
让我们看一个更孤立和简单的例子:
new Date() // creates a new date object new (Date()) // throws a TypeError: string is not a function