2015-11-19 16 views
6

Ho una classe in un file separato. Ho bisogno di creare un'istanza di esso in un altro file. Ho provato questo:node.js - Creazione istanza di una classe direttamente da richiedere

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

Ma questo non funziona come volevo. In questo momento sto usando questa soluzione temporanea:

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

Due domande;

Innanzitutto, perché non funziona.
In secondo luogo, come posso realizzare questo con un unico rivestimento?

risposta

8

La parola chiave new si applica automaticamente alla prima funzione che incontra. In questo caso, ciò risulta essere require. Sposta l'istruzione tra parentesi esporre la funzione corretta:

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

Questo funziona, ok. Ma ho invocato il 'require' con' ("ef66143e996d") '. Perché non 'new' si applica alla funzione restituita da' require ('./ connection.js') ("ef66143e996d") '. Questa deve essere la prima funzione che incontra. – MindlessRanger

+1

Quando si esegue 'new require ('connection')()', require è la prima funzione che incontra. Viene valutato da sinistra a destra. Il wrapping 'require ('connection')' tra parentesi rende tutto ciò a cui le parentesi si risolvono è ciò a cui 'new' viene applicato. – jperezov

+1

Per chiarire, assumendo 'require ('./ connection.js')' espone la funzione 'Connection', la funzione' Connection' _isn't_ exposed fino a quando non viene richiamata la funzione 'require'. La parola chiave 'new' si innescherebbe prima della funzione' require' _unless_ la funzione è racchiusa tra parentesi. È la stessa ragione per "3 * 2 + 1 = 7', ma" 3 * (2 + 1) = 9'. Pensa alla parola chiave 'new' come la moltiplicazione in questo esempio: ha una precedenza più alta. – jperezov

Problemi correlati