Rzućmy file.js z tego kodu:W jaki sposób wymaga pracy z nowym operatorem w pliku node.js?
module.exports.func = function(txt) {
this.a = 1;
this.b = 2;
console.log(txt, this);
return this;
}
Teraz mamy kolejny plik JS gdzie mamy następujący:
var r1 = new (require('./file')).func('r1');
var r2 = new require('./file').func('r2');
W przypadku gdy R1 to działa zgodnie z przeznaczeniem - R1 zawiera odniesienie do nowo utworzony obiekt.
W przypadku r2 to nie działa - r2 uzyskuje odwołanie do module.exports z pliku file.js.
Celem było utworzenie nowego obiektu przez wywołanie konstruktora func(). Jasne, że może to zrobić również w ten sposób, która jest równa R1:
var r3 = require('./file');
var r4 = new r3.func('r1');
Ja jednak nie rozumiem dlaczego r2 nie zachowuje się tak samo jak R1.
W jaki sposób dodatkowy nawias wokół wymagać ("./ plik") ma znaczenie?
Dzięki za wspaniałe wyjaśnienie. Czy poprawnie rozumiem nowego operatora, jeśli powiem, że gdy kompilator znajdzie funkcję po prawej stronie, wywołuje ją jako konstruktor. Jednakże, jeśli istnieje obiekt (ocena r1, po (wymagają ("./ plik")) oceny, to idzie dalej i sprawdza, czy plik ("r1") jest funkcją, a następnie wywołuje go jako konstruktora. Mam rację? –
Tak, masz rację. –
Dzięki za potwierdzenie. To smutne, że takie informacje o tym, jak interpretowany jest NOWY operator, nie znalazłem nigdzie indziej :( –