创建Gender类时触发Uncaught SyntaxError错误,寻求解决方案
修复你的Gender类语法错误
我帮你找出代码里的问题啦,你的Gender类触发Uncaught SyntaxError: Unexpected token主要是几个语法规范和逻辑结构的问题,下面是修正后的实现方案,再一步步解释错误点:
修正后的代码(推荐实现)
假设你外部已经定义了gender字典(比如const gender = {152: "M", 153: "F"}),我们把性别判断逻辑放到类的方法内部,或者在构造函数里预存结果:
方案1:方法内部实时判断性别
// 外部的性别字典,假设已经定义 const gender = {152: "M", 153: "F"}; class Gender { constructor(userId) { // 把用户ID存到实例上,供后续方法使用 this.userId = userId; } // 返回 his/her hisher() { const userGender = gender[this.userId]; // 可以加个默认值处理未知性别情况 return userGender === "M" ? "his" : userGender === "F" ? "her" : "their"; } // 返回 him/her himher() { const userGender = gender[this.userId]; return userGender === "M" ? "him" : userGender === "F" ? "her" : "them"; } // 返回 he/she heshe() { const userGender = gender[this.userId]; return userGender === "M" ? "he" : userGender === "F" ? "she" : "they"; } } // 使用示例 const user1Gender = new Gender(152); console.log(user1Gender.hisher()); // 输出 "his" console.log(user1Gender.himher()); // 输出 "him" console.log(user1Gender.heshe()); // 输出 "he"
方案2:构造函数预存结果(性能更优,适合多次调用)
const gender = {152: "M", 153: "F"}; class Gender { constructor(userId) { const userGender = gender[userId]; // 初始化时就把所有指代词存好,后续方法直接返回 this._hisher = userGender === "M" ? "his" : userGender === "F" ? "her" : "their"; this._himher = userGender === "M" ? "him" : userGender === "F" ? "her" : "them"; this._heshe = userGender === "M" ? "he" : userGender === "F" ? "she" : "they"; } hisher() { return this._hisher; } himher() { return this._himher; } heshe() { return this._heshe; } } // 使用示例 const user2Gender = new Gender(153); console.log(user2Gender.hisher()); // 输出 "her"
你的原始代码错误点解析
- 类体不能直接放执行代码:你把
gend = gender[val];和if判断直接写在类的主体里了,类的主体只能放方法定义、属性声明,不能直接写执行语句块。 - 构造函数语法错误:构造函数结束后你用了分号
;,类的语法中,构造函数和后续方法之间不需要分号,直接换行即可。 - 方法定义位置错误:你在
if块里定义hisher()等方法,这不符合类的语法规范,类方法需要直接声明在类体中,逻辑判断要放到方法内部或构造函数里。 - 变量引用错误:你直接用
val访问构造函数的参数,需要通过this.val(或者像我上面那样用this.userId)把参数挂载到实例上,才能在其他方法里访问。 - 拼写错误:代码里的
retur...是return的拼写错误,这也会导致语法问题。
内容的提问来源于stack exchange,提问作者Rafi Ki
相关产品推荐
相关产品推荐

