2017-02-05 2 views
1

Не похоже, что вы можете расширить объект класса (в данном случае используемый как перечисление) в Node.js. ПримерУзел js, расширяющий унаследованный объект (как перечисление)

Foo

class Foo {} 
Foo.action = {}; 
Foo.action.jump = 1; 
module.exports = Foo; 

Бар

var Foo = require('./foo'); 
var Baz = require('./baz'); 

class Bar extends Foo { 
    constructor(){ 
     super(); 
     this.baz = new Baz(); 
    } 
} 

Bar.action.stay = 2; 
module.exports = Bar; 

Использование (редактирование, он используется в классе)

var Bar = require('./bar'); 
class Baz { 
    constructor(){ 
     console.log(Bar.action); //undefined 
    } 
} 
module.exports = Baz; 

Я бы это вопрос циклической зависимости.

+1

Это [отлично работает для меня] (https://jsfiddle.net/xbtngykb/). Здесь что-то странное. – 4castle

+0

Ваш код также работает на моей локальной машине. какую версию nodejs вы используете? – num8er

+0

@ 4castle 'var b = new Bar(); console.log (b.action) ' – guest271314

ответ

1

Я считаю, что это проблема циклической зависимости.

Да, циклическая зависимость между Bar и Baz, используя назначение в common.js module.exports, делает Bar пустой объект в модуле Baz.js. Решение - use module properties only. (Btw, это отлично работало бы в декларативных модулях ES6).