2015-11-19 86 views
6

Mam klasę w osobnym pliku. Muszę utworzyć jego instancję w innym pliku. Próbowałem tego:node.js - Tworzenie instancji klasy bezpośrednio z żądania

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

Ale to nie działa tak, jak chciałem. Teraz używam tego jako tymczasowego rozwiązania:

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

Dwa pytania;

Po pierwsze, dlaczego to nie działa.
Po drugie, w jaki sposób mogę to osiągnąć za pomocą jednego liniowca?

Odpowiedz

8

Słowo kluczowe new odnosi się do pierwszej napotkanej funkcji. W tym przypadku jest to require. Zawijanie instrukcji w nawiasach narazi prawidłową funkcję:

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

To działa, ok. Ale wywołałem 'require' z' ("ef66143e996d") '. Dlaczego 'new' nie odnosi się do funkcji zwróconej przez' require ('./ connection.js') ("ef66143e996d") '. To musi być pierwsza funkcja, z którą się spotyka. – MindlessRanger

+1

Podczas uruchamiania 'new require ('connection')()' require jest pierwszą dostępną funkcją. Jest oceniany od lewej do prawej. Zawijanie 'require ('connection')' w nawiasach powoduje, że niezależnie od tego, do czego nawiązywane są nawiasy, jest stosowane wyrażenie 'new'. – jperezov

+1

Aby wyjaśnić, zakładając 'require ('./ connection.js'), ujawnia się funkcja' Connection', funkcja 'Connection' _isn't_ jest wyświetlana do momentu wywołania funkcji' require'. Słowo kluczowe 'new' uruchomi się przed funkcją' require' _unless_ funkcja jest zawijana w nawiasy. Z tego samego powodu '3 * 2 + 1 = 7', ale' 3 * (2 + 1) = 9'. Pomyśl o słowach kluczowych 'new' jako mnożeniu w tym przykładzie - ma on wyższy priorytet. – jperezov