代码之家  ›  专栏  ›  技术社区  ›  ChronicLogic

处的代码已断开。推入JS。

  •  0
  • ChronicLogic  · 技术社区  · 7 年前

    我似乎找不到为什么我不能用addDishToCourse方法将我的菜推到[课程名称]中。。courseName是一个数组,因此不应该有任何问题(尽管事实上并非如此>)。求你了,救命啊?

    const menu = {
        _courses : {
          _appetizers : [],
          _mains : [],
          _desserts : []
        },
    
    >>    set appetizers(appetizerIn) {
    
        },
        get appetizers() {
    
        },
        set mains(mainIn) {
    
        },
        get mains() {
    
        },
        set desserts(dessertIn) {
    
        },
        get desserts() {
    
        },
        get courses() {
          return {
            appetizers : this._courses.appetizers,
            mains : this._courses.mains,
            desserts : this._courses.desserts
          }
    
        },
            //Below is where my code breaks with the .push 
    
        addDishToCourse(courseName, dishName, dishPrice) {
            let dish = {
            name : dishName,
            price : dishPrice  
          };
          this._courses[courseName].push(dish);
    
        },
        getRandomDishFromCourse(courseName) {
          const dishes = this._courses[courseName];
          const randomIndex = Math.floor(Math.random() * this.dishes.length);
          return dishes[randomIndex];
        },
    
        generateRandomMeal() {
          const appetizer = this.getRandomDishFromCourse('appetizers');
          const main = this.getRandomDishFromCourse('mains');
          const dessert = this.getRandomDishFromCourse('desserts');
          //const totalPrice = appetizers.price + mains.price + desserts.price;
    
          return `Your appetizer is ${appetizers.name} followed by the main meal, which will be ${mains.name}, and finally you will have ${desserts.name} for dessert.`;// Your bill will be of ${totalPrice}.`;
        }
    
      };
    
      menu.addDishToCourse('appetizers', 'Caesar Salad', 3.75);
      menu.addDishToCourse('appetizers', 'Srimp Cocktail', 6.50);
      menu.addDishToCourse('appetizers', 'Escargots Gratines', 4.50);
      menu.addDishToCourse('mains', '16oz Ribeye', 38);
      menu.addDishToCourse('mains', 'Smoked Salmon', 18);
      menu.addDishToCourse('mains', 'Grilled Chicken Breast', 19);
      menu.addDishToCourse('desserts', 'Chocolate Lava Cake', 3.50);
      menu.addDishToCourse('desserts', 'Tiramisu', 4);
      menu.addDishToCourse('desserts', 'Kiev Cake', 6.50);
    
      let meal = menu.generateRandomMeal();
      console.log(meal);
    

    现在,我尝试使用if语句绕过。推,但这只是打破了其他地方的代码。否则,我知道我可能会使用setter方法,但我也不太确定如何处理这个问题。我会设置addDishToCourse吗?

    我是一个新手(从简单的代码^ ^ ^可以看出),所以非常感谢您的帮助!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Andy    7 年前

    创建新实例时 courseName 需要与 _courses 对象在代码中,所有这些名称前面都有下划线,因此代码会中断。

    例如:

    menu.addDishToCourse('appetizers', 'Caesar Salad', 3.75);
    

    你把“开胃菜”作为课程名称。。。

    addDishToCourse(courseName, dishName, dishPrice) {
      let dish = {
        name : dishName,
        price : dishPrice  
      };
      this._courses[courseName].push(dish);
    },
    

    ...你想把“开胃菜”加到 _课程 但是 _课程 只有 _appetizers 密钥名称。

    我会将对象键的名称更改为 appetizer , mains dessert 分别地