2017-01-27 3 views
8

Я хочу создать экземпляр класса без импорта первого класса и затем сделать new.Узел/JS создает новый экземпляр сразу при импорте

Вместо

var mainClass = require('../dist/main'); // has "class Main { ... }" 
var mainInstance = new mainClass(); 

Я хочу

var mainInstance = new require('../dist/main').Main(); 

Но что-то с синтаксисом неправильно.

var main = new require('../dist/main').Main(); 
            ^
TypeError: Class constructor Main cannot be invoked without 'new' 

Возможно ли это? Я использую комбинацию TypeScript и простой JS.

+0

Что фактическая ошибка синтаксиса вы получите? – erbridge

+0

@erbridge см. Мое обновление – DanFromGermany

+0

Если вы хотите, чтобы там был только один экземпляр, вы могли бы просто экспортировать экземпляр вместо класса, чтобы предотвратить неправильное использование. – 4castle

ответ

7

Вы можете использовать скобки для достижения этой цели:

var main = new (require('../dist/main').Main)(); 

И если ваш module.exports был только экспорт класса вы могли бы сделать это как следующее:

var main = new (require('../dist/main'))(); 
+1

Вы также можете обернуть вызов 'require':' new (require ('../ dist/main')). ​​Main() '. – erbridge

Смежные вопросы