Como requer trabalho com novo operador em node.js?
Vamos ter um arquivo.js com este código:
module.exports.func = function(txt) {
this.a = 1;
this.b = 2;
console.log(txt, this);
return this;
}
Agora temos outro arquivo JS em que fazemos o seguinte:
var r1 = new (require('./file')).func('r1');
var r2 = new require('./file').func('r2');
No caso r1, ele funciona como pretendido - r1 contém referência ao objeto recém-criado.
No caso r2, ele não funciona - o r2 obtém referência a module.exports de dentro do file.js.
A intenção era criar um novo objeto chamando o construtor func (). Claro, eu também posso fazer desta forma que é igual a r1:
var r3 = require('./file');
var r4 = new r3.func('r1');
No entanto, eu não entendo porque o r2 não se comporta da mesma maneira que o r1.
Como o parêntese extra requer ('./ file') faz diferença?