如何更新JavaScript类中属于数组类型的实例属性?
修正后的完整可运行代码
class Person { constructor(name, age, gender, interests) { this.name = name; this.age = age; this.gender = gender; this.interests = []; // 批量添加传入的兴趣项 this.addInterests(...interests); } hello() { // 处理兴趣数组的输出格式,最后一项前加and let interestsStr; if (this.interests.length === 1) { interestsStr = this.interests[0]; } else { const lastInterest = this.interests.pop(); interestsStr = `${this.interests.join(', ')} and ${lastInterest}`; } return `Hello, my name is ${this.name}, my gender is ${this.gender} and I am ${this.age} years old. My interests are ${interestsStr}.`; } addInterests(...interests) { // 把传入的所有兴趣项追加到实例的兴趣数组中 this.interests.push(...interests); } } // 实例化测试 let person = new Person('Ryan', 30, 'male',['being a hardarse', 'agile', 'ssd hard drives']); let greeting = person.hello(); console.log(greeting);
原有代码的核心问题说明
- 错误使用
static修饰符:static定义的是类本身的公共属性,不属于每个独立的实例对象,实例化后通过this无法访问到对应属性。 - 构造函数参数缺失:实例化时传入了4个参数,你的
constructor只定义了3个入参,兴趣数组没有被接收。 - 类内部调用方法/属性缺少
this前缀:在类内部调用自身的方法和属性必须加this.,否则会被识别为全局变量,触发未定义报错。 - 兴趣数组的输出没有做格式处理:默认的数组转字符串只会用逗号拼接所有项,不符合预期输出里最后一项前加
and的要求。
内容的提问来源于stack exchange,提问作者PalesaDev
相关产品推荐
相关产品推荐

