JavaScript中如何在农场类构造函数中处理动物数组参数?
农场类的动物数组处理方案
确保构造函数中animals始终为数组
要保证无论调用构造函数时是否传入animals参数,或者传入的参数类型是否正确,this.animals最终都是数组。可以通过设置默认值+类型校验来实现:
容错处理版本(兼容非数组输入)
class Farm { constructor(id, location, animals = []) { this.id = id; this.location = location; // 若传入的不是数组,则替换为空数组 this.animals = Array.isArray(animals) ? animals : []; } }
严格校验版本(强制数组输入)
如果希望调用者必须传入数组类型的animals,可以抛出错误提示:
class Farm { constructor(id, location, animals = []) { this.id = id; this.location = location; if (!Array.isArray(animals)) { throw new Error('animals 参数必须是数组类型'); } this.animals = animals; } }
增强动物管理能力(可选)
为了更方便操作农场里的动物,可以给类添加常用的管理方法,比如添加动物、更新数量、删除动物等:
class Farm { constructor(id, location, animals = []) { this.id = id; this.location = location; this.animals = Array.isArray(animals) ? animals : []; } // 添加动物:已存在则增加数量,不存在则新增 addAnimal(name, quantity) { const targetAnimal = this.animals.find(animal => animal.name === name); if (targetAnimal) { targetAnimal.quantity += quantity; } else { this.animals.push({ name, quantity }); } } // 更新指定动物的数量 updateAnimalQuantity(name, newQuantity) { const targetAnimal = this.animals.find(animal => animal.name === name); if (targetAnimal) { targetAnimal.quantity = newQuantity; } } // 删除指定动物 removeAnimal(name) { this.animals = this.animals.filter(animal => animal.name !== name); } }
使用示例
// 创建农场实例 const sunnyFarm = new Farm(1, '澳大利亚维多利亚州', [{ name: '奶牛', quantity: 12 }, { name: '绵羊', quantity: 30 }]); // 添加50只鸡 sunnyFarm.addAnimal('鸡', 50); // 将奶牛数量更新为18 sunnyFarm.updateAnimalQuantity('奶牛', 18); // 删除绵羊 sunnyFarm.removeAnimal('绵羊'); console.log(sunnyFarm.animals); // 输出: [{ name: '奶牛', quantity: 18 }, { name: '鸡', quantity: 50 }]
内容的提问来源于stack exchange,提问作者MirunaB
相关产品推荐
相关产品推荐

