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

如何更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:04