超全模态模型 × Harness 升级,升级解锁 ArkClaw,最新支持 DeepSeek-V4 系列与 GLM-5.1
嘿,这个报错我太熟了!核心原因就是你尝试继承的目标不是一个有效的构造函数——要么是普通对象、null,要么是导入导出时没拿到类本身。结合你给的代码和场景,我梳理了几个最可能的问题和解决办法:
从你monster.js里引入minimonster.js的代码来看,大概率是minimonster.js的导出方式错了,导致你拿到的miniMonster不是类构造函数。
monster.js
minimonster.js
miniMonster
要是你这么写导出:
const monster = require('./monster.js'); class miniMonster extends monster { // 你的子类逻辑 } // 坑点:导出的是包含类的对象,不是类本身! module.exports = { miniMonster };
那在monster.js里require拿到的miniMonster是个普通对象,不是类,执行new miniMonster()肯定会报错。
require
new miniMonster()
直接导出类本身就行:
const monster = require('./monster.js'); class miniMonster extends monster { constructor(options) { super(options); // 子类必须调用super()继承父类属性 // 子类自己的逻辑 } } // 直接导出类 module.exports = miniMonster;
如果monster.js和minimonster.js互相导入(比如A导入B,B又导入A),模块加载时会出现循环引用,这时候其中一个模块可能还没初始化完成,你拿到的就是个空对象,自然触发报错。
你的monster类构造函数参数有个小瑕疵:
monster
constructor(options = { name }, health) { this.options = options; this.health = 100; // ... }
你实例化时用了new monster("Godzilla"),这时候options会被赋值成字符串"Godzilla",不是你预期的{name: "Godzilla"}。要么改成正确的实例化方式:
new monster("Godzilla")
options
"Godzilla"
{name: "Godzilla"}
let bigMonster = new monster({ name: "Godzilla" });
要么调整构造函数参数,让它更符合使用习惯:
constructor(name, health = 100) { this.options = { name }; this.health = health; // ... } // 这样就能直接传字符串:new monster("Godzilla")
JavaScript是大小写敏感的!要是你在minimonster.js里定义的类是MiniMonster,但导入后用new miniMonster()(小写开头),也会出问题。确保导入的变量名和导出的类名完全一致。
MiniMonster
如果按上面的步骤调整后还是有问题,把minimonster.js的完整代码贴出来,我再帮你排查~
内容的提问来源于stack exchange,提问作者Charlote22
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起
模型再升级,30秒超长叙事, 模态参考扩容
模型自由,工具不限,最新支持 Deepseek-V4 系列、GLM-5.3 系列
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列
大模型19元起,Al应用9.9元畅享,新人首购爆款尽享优惠