Javascript TypeError:this.list.push不是ecmascript 6中的函数

Javascript TypeError:this.list.push不是ecmascript 6中的函数,javascript,Javascript,调用我的GroceryList类的add函数时,出现错误: TypeError:this.list.push不是函数 为什么会这样 class GroceryList { constructor() { this.list = { value: [], writable: false, enumerable: true }; } add(it

调用我的GroceryList类的add函数时,出现错误:

TypeError:this.list.push不是函数

为什么会这样

class GroceryList {

      constructor() {
        this.list = {
            value: [],
            writable: false,
            enumerable: true  
          };
      }

        add(item) {
        this.list.push(item);
      }

      getAll() {
        return this.list;
      }

      getItemIndex(value) {
        var index = this.list.length;
        while(--index > -1) {
          if(this.list[index] === value) {
            return index;
          }
        }
        return -1;
      }
    }
你弄糊涂了

  • 整个对象
vs

  • 作为该对象属性的列表

list
对象包含一个列表,但这并不意味着它是一个列表。您应该编写
list.value.push(x)
似乎您正在尝试使用属性描述符。然而,这些描述符只适用于

按字面意义将具有属性
可写
可枚举
的对象分配给
此列表

你似乎想要的是:

Object.definProperty(this, 'list', {
  value: [],
  writable: false,
  enumerable: true  
});

现在,
this.list
返回一个数组,但无法为属性指定新值。

this.list
是一个对象。只有数组具有
push
方法。ES6没有改变这一点。是的,您正在将
list
声明为
{…}
。不过,我知道您正在尝试做什么。
Object.definProperty(this, 'list', {
  value: [],
  writable: false,
  enumerable: true  
});