JavaScript TypeError,无法读取undefined的属性,但定义了该函数。我究竟做错了什么?

时间:2018-03-15 20:34:21

标签: javascript function object

我一直收到错误: " TypeError:无法读取属性' push'未定义"

错误在这一行:" this.courseName.push(dish);"

以下是代码:

let menu = {
    _courses: {
      _appetizers:[] ,
      _mains:[],
      _desserts: []
    },

    addDishToCourse(courseName, dishName, dishPrice){
        const dish = { name: this.dishName, price: this.dishPrice };

        // ERROR HERE: **this._courses[courseName].push(dish);**
    },
};

我一直坚持这个错误几个小时。有什么我没看到的吗?

很抱歉,如果有一个简单的解决方案。我对JavaScript比较陌生。

修改

我确实错误地调用了键。我现在称这个函数为:

  menu.addDishToCourse("_appetizers", "random", 10);
  console.log(menu._courses._appetizers);

当我在编译器中记录它时,它返回:

    [ { name: undefined, price: undefined } ]

似乎这个功能没有被调用。我是否从根本上错误地接近了这个?

2 个答案:

答案 0 :(得分:1)

问题是RequestDispatcher rd=request.getRequestDispatcher("index.jsp"); rd.forward(request, response);

scopethis本身(本例中为菜单),并且object_courses为其属性。

addDishToCourse addDishToCourse内部正在查看thisobject的{​​{1}},但它们的范围是函数本身(来自参数) )。

所以正确的代码就是这样:

dishName

答案 1 :(得分:1)

您的第一个问题是您向该函数传递了错误的courseName,这就是您收到错误的原因。

而你的第二个问题是,当你使用{ name: this.dishName, price: this.dishPrice }时,你要分配错误的值,以反对推进你的课程数组。

事实上,当您使用this.dishName时,您试图从dishName对象获取menu,这就是undefined的原因,您只需要使用参数{{1}你和dishName传递函数的参数。

dishPrice

这是一个有效的演示:

    const dish = {
      name: dishName,
      price: dishPrice
    };

    this._courses[courseName].push(dish);