si alguien pudiera explicar por qué el método getter en este código no está definido, sería apreciado. Pensé que podría tener algo que ver con el contexto 'este'. ¿Está this.appetizers volviendo indefinido debido a este contexto? Cuando llamo a un método en el objeto y luego ese método llama al método get, falla, ¿es porque este contexto cambia al objeto de función? Pensé que este podría ser el caso, pero tengo otro ejemplo de código que hace esto y funciona bien.
let menu = { _courses: { _appetizers: [], _mains: [], _desserts: [], get appetizers() { return this._appetizers; }, get mains() { return this._mains; }, get desserts() { return this._desserts; }, set appetizers(appetizerIn) { }, set mains(mainIn) { }, set desserts(dessetIn) { } }, get courses() { return { appetizers: this.appetizers, mains: this.mains, desserts: this.desserts }; }, addDishToCourse(courseName, name, price) { const dish = { name, price }; this.courses[courseName].push(dish) // fails here }, getRandomDishFromCourse(courseName) { const dishes = this._courses[courseName]; const randomDish = Math.floor(Math.random() * dishes.length); return dishes[randomDish]; }, 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 starts with a ${appetizer.name}, followed by the main dish ${main.name}, ending with a dessert of ${dessert.name}. The total price of your dish is £${totalPrice}`; } }; menu.addDishToCourse('appetizers', 'Caesar Salad', 4.25); menu.addDishToCourse('appetizers', 'Potato Cakes with Smoked Salmon & Cream Cheese', 5.50); menu.addDishToCourse('appetizers', 'Smoked Salmon, Dill & Lemon Paté', 4.25); menu.addDishToCourse('appetizers', 'Mini Avocado Toasts', 3.50); menu.addDishToCourse('mains', 'Spinach & Ricotta Rotolo', 6.75); menu.addDishToCourse('mains', 'Baked Sea Bass with Lemon Caper Dressing', 8.75); menu.addDishToCourse('mains', 'Butternut Chilli', 7.50); menu.addDishToCourse('mains', 'Grilled Miso Salmon with Rice Noodles', 8.50); menu.addDishToCourse('mains', 'Spinach & Ricotta Rotolo', 6.75); menu.addDishToCourse('desserts', 'Salted Chocolate & Hazelnut Brownies', 5.00); menu.addDishToCourse('desserts', 'Cherry & Almond Frangipane Galette', 5.75); menu.addDishToCourse('desserts', 'Chocolate & Malt Loaf Torte', 5.50); menu.addDishToCourse('desserts', 'Chocolate Hazelnut Ice cream Cheesecake', 5.00); menu.addDishToCourse('desserts', 'Peanut Butter Berry Crisp', 5.00); let meal = menu.generateRandomMeal(); console.log(meal);Como se menciona en los comentarios, no está definido. Esto se debe a que, aunque tiene un getter, todavía se encuentra debajo del objeto _courses :
let menu = { _courses: { _appetizers: [], get appetizers() { return this._appetizers; }, ... } } Por lo tanto, querrá usar this._courses.appetizers , que es un getter para this._courses._appetizers