Lassen Sie uns einen file.js mit diesem Code haben:Wie erfordert die Arbeit mit neuen Operator in node.js?
module.exports.func = function(txt) {
this.a = 1;
this.b = 2;
console.log(txt, this);
return this;
}
Jetzt haben wir eine andere JS-Datei, wo wir folgendes:
var r1 = new (require('./file')).func('r1');
var r2 = new require('./file').func('r2');
In r1 Fall ist es wie vorgesehen funktioniert - R1 enthält auf die Referenz neu erstelltes Objekt
In r2 Fall funktioniert es nicht - r2 ruft Verweis auf module.exports aus der Datei.js.
Die Absicht war, ein neues Objekt durch Aufruf von func() - Konstruktor zu erstellen. Sicher, ich kann es auch auf diese Weise, die zu r1 gleich ist:
var r3 = require('./file');
var r4 = new r3.func('r1');
Aber ich verstehe nicht, warum r2 die gleiche Art und Weise wie r1 nicht verhalten.
Wie machen die zusätzlichen runden Klammern ('./ file') einen Unterschied?
Vielen Dank für eine große Erklärung. Versteh ich den neuen Operator richtig, wenn ich sage, dass der Compiler, wenn er eine Funktion auf der rechten Seite von new findet, diese als Konstruktor bezeichnet. Wenn jedoch ein Objekt vorhanden ist (der Fall r1, nach (require ('./ file')), geht es weiter und prüft, ob die Datei ('r1') eine Funktion ist und ruft sie dann als Konstruktor auf. Hab ich recht? –
Ja, Sie haben Recht. –
Danke für die Bestätigung. Es ist traurig, dass solche Informationen darüber, wie der Operator NEW interpretiert wird, ich nirgends finden konnte :( –