我收到此错误,但无法弄清楚原因:this._courses[courseName].push(dish); ^类型错误:无法在 Object.addDishToCourse 读取未定义的属性“推送” let menu = { _courses: { appetizers: [], mains: [], desserts: [], get appetizers() { return this.appertizers; }, set appetizers(newAppetizer) { this.appetizers = newAppetizer; }, get mains() { return this.mains }, set mains(newMain) { this.mains = newMain; }, get desserts() { return this.desserts; }, set desserts(newDessert) { this.desserts = newDessert; }, }, get courses() { return { appetizers: this._courses.appetizers, mains: this._courses.mains, desserts: this._courses.desserts }; }, addDishToCourse(courseName, dishName, dishPrice) { const dish = { name: dishName, price: dishPrice, }; this._courses[courseName].push(dish); }, getRandomDishFromCourse(courseName) { const dishes = this._courses[courseName]; const randomIndex = Math.floor(Math.random() * dishes.length); return dishes[randomIndedx]; }, generateRandomMeal() { const appetizer = this.getRandomDishFromCourse("appetizers"); const main = this.getRandomDishFromCourse("mains"); const dessert = this.getRandomDishFromCourse("desserts"); const totalPrice = appetizer.price + main.price + dessert.price; return `Your meal is ${appetizer.name}, ${main.name}, ${dessert.name}. Your total is $${totalPrice}.` } }
3 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
您不能拥有一个属性 getter 和一个完全相同名称的属性。一个覆盖另一个。但是,由于您正在实现默认行为,因此这里并没有真正指向属性 getter 和 setter。
如果您声明_courses为:
_courses: {
appetizers: [],
mains: [],
desserts: [],
}
并且不要使用 getter setter,它应该可以按您的预期工作。
如果您确实想在此处使用属性设置器和获取器,则必须为存储值的基础属性指定与 getter/setter 不同的名称。
GCT1015
TA贡献1827条经验 获得超4个赞
您的代码中有一个错字:
get appetizers() {
return this.appertizers; // <-- Typo: should be appetizers
}
此外,如果您仍然遇到问题,请确保您获得了预期的结果。例如,尝试运行控制台日志以查看它是否产生您期望的结果。
console.log(this._courses[courseName]);
添加回答
举报
0/150
提交
取消