You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

解决module.exports导出父子类及ReferenceError问题

问题根源

你遇到的ReferenceError核心原因是Node.js的每个模块都有独立作用域:你的Dalmatian类继承自Dog,但在dalmatian.js文件里并没有主动引入Dog类。哪怕你在其他文件里先引入了dog.js,那也只是在那个文件的作用域里有Dog的定义,和dalmatian.js的作用域完全没关系,所以Node.js在dalmatian.js里找不到Dog就会报错。

正确实现方式

1. 先在子类文件中引入父类

修改/js/dalmatian.js的代码,先引入父类Dog,再定义子类,最后按需同时导出两个类:

// 先引入父类Dog,路径要和你的实际文件结构匹配
const Dog = require('./dog.js');

class Dalmatian extends Dog {
  constructor() {
    super();
    // 你的子类逻辑代码
  }
}

// 同时导出父类和子类
module.exports = {
  Dog,
  Dalmatian
};

2. 在其他文件中正确引入

现在你可以在需要的文件里一次性引入两个类,使用起来更方便:

// 通过解构语法一次性获取父类和子类
const { Dog, Dalmatian } = require('../js/dalmatian.js');

// 实例化测试
const myDog = new Dog();
const mySpottedDog = new Dalmatian();

如果你的场景需要分开引入(比如某些地方只需要父类),也可以保持dog.js单独导出:

// dog.js中的代码
class Dog {
  constructor() {
    // 父类逻辑
  }
}

module.exports = Dog;

然后dalmatian.js依然要自己引入Dog,再导出子类:

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

class Dalmatian extends Dog {
  // ...子类逻辑
}

// 只导出子类,或者继续同时导出两个都可以
module.exports = {
  Dalmatian
};

此时在其他文件里可以这样使用:

const Dog = require('../js/dog.js');
const { Dalmatian } = require('../js/dalmatian.js');

这样也能正常运行,因为dalmatian.js内部已经自己引入了Dog,不会再出现未定义的错误。

关键提醒

  • 模块作用域是隔离的,每个需要用到外部类/模块的文件,都要自己显式引入,不能依赖其他文件的引入来共享作用域。
  • 用对象形式导出多个成员时,引入端可以用解构语法快速获取需要的内容,代码会更简洁。

内容的提问来源于stack exchange,提问作者ShanZhengYang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:46:44