猿问

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

我收到此错误,但无法弄清楚原因:


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}.`

        }

    

    }

    

智慧大石
浏览 314回答 3
3回答

慕娘9325324

您不能拥有一个属性 getter 和一个完全相同名称的属性。一个覆盖另一个。但是,由于您正在实现默认行为,因此这里并没有真正指向属性 getter 和 setter。如果您声明_courses为:    _courses: {        appetizers: [],        mains: [],        desserts: [],    }并且不要使用 getter setter,它应该可以按您的预期工作。如果您确实想在此处使用属性设置器和获取器,则必须为存储值的基础属性指定与 getter/setter 不同的名称。

GCT1015

您的代码中有一个错字:get appetizers() {&nbsp; &nbsp; return this.appertizers; // <-- Typo: should be appetizers}此外,如果您仍然遇到问题,请确保您获得了预期的结果。例如,尝试运行控制台日志以查看它是否产生您期望的结果。console.log(this._courses[courseName]);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答