为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 错误:无法读取未定义的属性“推送”

JavaScript 错误:无法读取未定义的属性“推送”

智慧大石 2021-09-04 17:38:41
我收到此错误,但无法弄清楚原因: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 不同的名称。


查看完整回答
反对 回复 2021-09-04
?
GCT1015

TA贡献1827条经验 获得超4个赞

您的代码中有一个错字:


get appetizers() {

    return this.appertizers; // <-- Typo: should be appetizers

}

此外,如果您仍然遇到问题,请确保您获得了预期的结果。例如,尝试运行控制台日志以查看它是否产生您期望的结果。


console.log(this._courses[courseName]);


查看完整回答
反对 回复 2021-09-04
  • 3 回答
  • 0 关注
  • 313 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信