关于Cat类的两个技术实现求助:随机初始年龄与说话增龄
Cat类需求解决方案
以下是针对两个任务的实现方案,附带修改后的完整代码:
任务1:初始随机年龄与防覆盖处理
- 初始化逻辑:在构造函数中直接生成5到10之间的随机整数作为初始年龄,替代原代码中
this.age = null的写法,确保猫实例创建时就拥有合法初始年龄。 - 防覆盖处理:修正
setAge方法的逻辑——原方法会无视传入参数强制生成随机数,必然覆盖已有年龄;现在改为仅接受合法的非负数字作为年龄值,非法输入会触发警告,避免意外覆盖初始随机年龄。如果需要完全禁止修改年龄,可在setAge中添加判断,仅当this.age未初始化时允许设置。
任务2:每5次speak调用年龄加1
- 添加私有计数器
#speakCount,用于记录speak方法的调用次数(私有字段可防止外部篡改计数)。 - 每次调用
speak时,计数器自增,当计数达到5的倍数时,将猫的年龄加1,可添加日志提示年龄变化。
修改后的完整代码
class Cat { name; age; #speakCount = 0; // 私有计数器,记录speak调用次数 constructor(name) { this.setName(name || "Norman"); // 初始化5-10之间的随机年龄 this.age = Math.floor(Math.random() * 6) + 5; } getName() { return this.name; } getAge() { return this.age; } setName(name) { this.name = name; } setAge(age) { // 仅接受合法的非负数字作为年龄,避免意外覆盖 if (typeof age === 'number' && age >= 0) { this.age = age; } else { console.warn('请传入有效的非负数字作为年龄'); } } speak(sound) { this.sound = sound; this.#speakCount++; // 每调用5次speak,年龄加1 if (this.#speakCount % 5 === 0) { this.age++; console.log(`${this.name}叫了5次,长大1岁啦,现在年龄是${this.age}`); } } }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

