如何使用module.exports和require()导出Node.js中的类和超类?

时间:2018-04-22 04:34:28

标签: javascript node.js module

这可能很明显,但我不明白如何使用module.export导出子类和超类。我目前收到错误ReferenceError: not defined。这是Dalmatian中的示例子类/js/dalmatian.js

class Dalmatian extends Dog{
  constructor(){
       super();
      /// stuff
  }
}

module.exports = {
  Dalmatian : Dalmatian
}

如果我然后在另一个*.js文件中导出此类,我会遇到问题:

require('../js/dog.js');   // this works
require('../js/dalmatian.js');   // this fails

ReferenceError: Dog is not defined

我不明白。超级构造函数在达尔马提亚语中使用,即super();

如何导出基类(此处为Dog),以便我不会收到此错误?

2 个答案:

答案 0 :(得分:3)

您必须在子类声明中require父类。另外export父表单子类export子句。

然后,您可以使用Dog子类的脚本中的Dalmatianrequires('./dalmatian')

这是一个有效的例子:

<强> dog.js

class Dog{
    constructor(){
      console.log('dog');
  }
}

module.exports = Dog;

dalmatian.js (请注意我们如何导出两者)

const Dog = require('./dog');

class Dalmatian extends Dog{
    constructor(){
        super();
      console.log('dalmatian');
  }
}

module.exports = {
  Dalmatian : Dalmatian, //export this class
  Dog: Dog // and export parent class too!
}

<强> test.js

const Dalmatian = require('./dalmatian').Dalmatian;
const Dog = require('./dalmatian').Dog; //---> Notice this
//const Dog = require('./dog'); ---> works too, but above is clearer and cleaner

new Dalmatian();
new Dog();

输出:

➔ node test.js
dog
dalmatian
dog

答案 1 :(得分:2)

Dog未在包含Dalmation的模块中定义,因为模块无法访问彼此的变量。

您的 Dalmation 模块应如下所示:

var parentClass = require('./Dog.js')

class Dalmatian extends parentClass.Dog {
    constructor(){
      super();
      console.log('starting dalmation')
    }
}

module.exports = {
  Dalmatian: Dalmatian
}

另外,请注意,super()应该在> 构造函数方法中调用,而不是在它之前。