Jak wymaga pracy z nowym operatorem w node.js?

Zróbmy plik.js z tym kodem:

module.exports.func = function(txt) {
    this.a = 1;
    this.b = 2;
    console.log(txt, this);
    return this;
}

Teraz mamy inny plik JS, w którym wykonujemy następujące czynności:

var r1 = new (require('./file')).func('r1');
var r2 = new require('./file').func('r2');

W przypadku r1 działa zgodnie z przeznaczeniem - r1 zawiera odwołanie do nowo utworzonego obiektu.

W przypadku r2 nie działa - r2 pobiera odwołanie do modułu module.export z pliku js.

Intencją było stworzenie nowego obiektu przez wywołanie konstruktora func (). Oczywiście, mogę to zrobić w ten sposób, który jest równy r1:

var r3 = require('./file');
var r4 = new r3.func('r1');

Nie rozumiem jednak, dlaczego r2 nie zachowuje się tak samo jak r1.

W jaki sposób dodatkowe nawiasy wokół require ('./ file') robią różnicę?

questionAnswers(1)

yourAnswerToTheQuestion