2015-11-19 9 views
6

Ich habe eine Klasse in einer separaten Datei. Ich muss eine Instanz davon in einer anderen Datei erstellen. Ich habe das versucht:node.js - Erstellen einer Instanz einer Klasse direkt von require

var connection = new require('./connection.js')("ef66143e996d"); 

Aber das funktioniert nicht, wie ich wollte. Im Moment benutze ich das als eine vorübergehende Lösung:

var Connection = require('./connection.js'); 
connection = new Connection("ef66143e996d"); 

Zwei Fragen;

Erstens, warum funktioniert das nicht.
Zweitens, wie kann ich dies mit einem Einzeiler erreichen?

Antwort

8

Das Schlüsselwort new bezieht sich auf die erste Funktion, auf die es stößt. In diesem Fall ist dies require. Wenn Sie die Anweisung in Klammern einschließen, wird die korrekte Funktion angezeigt:

var connection = new (require('./connection.js'))("ef66143e996d"); 
+0

Das funktioniert, ok. Aber ich rief 'require' mit' ("ef66143e996d") 'auf. Warum gilt "neu" nicht für die von 'require ('./ connection.js') zurückgegebene Funktion (" ef66143e996d ")'. Dies muss die erste Funktion sein, auf die es trifft. – MindlessRanger

+1

Wenn Sie 'new require ('connection')()' ausführen, ist require die erste Funktion, auf die es stößt. Es wird von links nach rechts ausgewertet. Wrapping 'require ('connection')' in Klammern macht es so, dass, was auch immer in den Klammern zu finden ist, auf 'new' angewendet wird. – jperezov

+1

Um zu verdeutlichen, dass 'require ('./ connection.js') 'die Funktion' Connection 'freigibt, wird die' Connection' Funktion _nicht_ offengelegt, bis die 'require' Funktion aufgerufen wird. Das Schlüsselwort 'new' würde vor der Funktion' require' ausgelöst werden _unless_ Die Funktion wird in Klammern eingeschlossen. Es ist der gleiche Grund "3 * 2 + 1 = 7", aber "3 * (2 + 1) = 9". Denken Sie an das Schlüsselwort "new" als Multiplikation in diesem Beispiel - es hat eine höhere Priorität. – jperezov