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

JavaScript类中同名方法无法实现Java风格重载,无参调用时报错的问题求助

JavaScript类中同名方法无法实现Java风格重载,无参调用时报错的问题求助

嘿,我完全懂你碰到的麻烦!JavaScript和Java不一样,它不支持方法重载——也就是说你在同一个类里定义多个同名的getTTT方法时,后面的方法会直接覆盖掉前面的,最后只有最后那个接收两个参数的getTTT生效,这就是你无参调用时出错的核心原因!

先给你拆解下错误根源:

你写的三个getTTT方法,在JavaScript里只会保留最后一个(带lesson和subject参数的那个)。当你无参调用getTTT()时,lesson和subject都会是undefined,代码就会执行tttt_data.dersler[undefined][undefined],而dersler[undefined]本身就是undefined,再尝试访问它的[undefined]属性自然就会抛出你看到的控制台错误。

另外还要提个小细节:你在Starting Code里写的是tttt.getTTTT(),但类里的方法名是getTTT(少了一个T),这也会导致调用失败,记得修正这个笔误哦!

解决方案:用单个方法处理多参数场景

既然JS不支持重载,我们可以把逻辑整合到同一个方法里,通过判断参数的数量或是否存在来返回不同的结果,这里给你两种实现方式:

方式1:通过arguments.length判断参数数量

import tttt_data from "@/data/tttt.json";

export class TTT {
    getTTT(lesson, subject) {
        // 无参数时返回所有dersler
        if (arguments.length === 0) {
            return tttt_data.dersler;
        }
        // 仅传入lesson参数时返回对应课程的内容
        else if (arguments.length === 1) {
            return tttt_data.dersler[lesson];
        }
        // 传入两个参数时返回对应课程下的主题内容
        else {
            return tttt_data.dersler[lesson][subject];
        }
    }
}

方式2:通过判断参数是否存在(更现代的写法)

import tttt_data from "@/data/tttt.json";

export class TTT {
    getTTT(lesson, subject) {
        // 无参数的情况
        if (lesson === undefined && subject === undefined) {
            return tttt_data.dersler;
        }
        // 只有lesson参数的情况
        if (subject === undefined) {
            return tttt_data.dersler[lesson];
        }
        // 两个参数都存在的情况
        return tttt_data.dersler[lesson][subject];
    }
}

这样修改后,你就可以像Java里那样灵活调用了:

  • tttt.getTTT() → 返回所有dersler
  • tttt.getTTT("某个课程") → 返回该课程的内容
  • tttt.getTTT("某个课程", "某个主题") → 返回对应主题的内容

备注:内容来源于stack exchange,提问作者Droidbane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:04:36