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()→ 返回所有derslertttt.getTTT("某个课程")→ 返回该课程的内容tttt.getTTT("某个课程", "某个主题")→ 返回对应主题的内容
备注:内容来源于stack exchange,提问作者Droidbane
相关产品推荐
相关产品推荐

