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

Sha*_*ang 2 javascript module node.js

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

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

module.exports = {
  Dalmatian : Dalmatian
}
Run Code Online (Sandbox Code Playgroud)

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

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

ReferenceError: Dog is not defined
Run Code Online (Sandbox Code Playgroud)

我不明白。超级构造函数在 Dalmatian 中使用,即super();.

如何导出基类(此处为Dog)以免出现此错误?

Sha*_*nak 5

您必须require在子类声明中添加父类。也是export父类子句的export形式。

\n\n

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

\n\n

这是一个工作示例:

\n\n

狗.js

\n\n
class Dog{\n    constructor(){\n      console.log('dog');\n  }\n}\n\nmodule.exports = Dog;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
const Dog = require('./dog');\n\nclass Dalmatian extends Dog{\n    constructor(){\n        super();\n      console.log('dalmatian');\n  }\n}\n\nmodule.exports = {\n  Dalmatian : Dalmatian, //export this class\n  Dog: Dog // and export parent class too!\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试.js

\n\n
const Dalmatian = require('./dalmatian').Dalmatian;\nconst Dog = require('./dalmatian').Dog; //---> Notice this\n//const Dog = require('./dog'); ---> works too, but above is clearer and cleaner\n\nnew Dalmatian();\nnew Dog();\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
\xe2\x9e\x94 node test.js\ndog\ndalmatian\ndog\n
Run Code Online (Sandbox Code Playgroud)\n

  • 如果您在 Dalmatian 中引用“Dog”(通过说“class Dalmatian extends Dog”来实现),那么您需要定义 Dog。这就是为什么你必须导入它 (2认同)