2017-01-12 8 views
1

У меня есть следующий мастер ES6 класс, который содержит ссылки на другие классы ES6, которые динамически называют позже в своем коде, как так:Получение ошибки узла с использованием нового с ES6 класса, хранящегося в переменной

class Root { 
    constructor() { 
     this.refs = { 
     ref1: require('ref1') 
     ref2: require('ref2') 
     } 
    } 
} 

module.exports = exports = new Root; 

ref1 и ref2 экспорт новый экземпляр class Ref1 и class Ref2.

Позже вниз по линии, я пытаюсь сделать экземпляр одной из этих ссылок классов, выполнив:

const Root = require('root'); 

class other { 

someFunc() { 

    var ref = new Root.refs['ref1'](value); 
} 

} 

Это всегда заканчивается со следующей ошибкой: TypeError: this.actions[action.action] is not a constructor

Как правильно сделать ссылка на эти классы ref?

+0

это не должно быть 'новый Root()'? – zurfyx

+0

Если я исправляю ошибки синтаксиса, тогда он анализирует и работает хорошо. Сообщение об ошибке, которое вы скопировали здесь, явно не связано с этим кодом. Мы более чем рады помочь, но, пожалуйста, отправьте [MCVE] (http://stackoverflow.com/help/mcve). –

ответ

0

Вам не хватает () после new Root.

Если экспорт устанавливается по умолчанию вы также можете попробовать с require('ref1').default

+0

Каковы преимущества/недостатки с помощью добавления '' '()' '' и использования метода '' the.defaults'''? – JeffH

+0

'()' 'необходимо, если вы хотите инициализировать класс' new'. Это способ инициализации конструктора. 'default' требуется для сбора' export default'. Если вы используете 'module.exports = Class', это не так. Все зависит от того, используете ли вы ES6 или нет. – zurfyx

0

Вы не экспортировать класс Root экспортируемого экземпляр класса Root с помощью ключевого слова new.

Изменить сказать module.exports = Root;