一尘不染

如何在Node.js中与新运算符一起工作?

node.js

让我们来一个带有以下代码的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’)的多余括号如何产生作用?


阅读 279

收藏
2020-07-07

共1个答案

一尘不染

这两个版本根本不同。

这个:

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

执行需求,返回的输出,./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
2020-07-07