为什么在创建对象的新实例时,函数的属性不会覆盖为默认值?

时间:2017-10-10 03:53:03

标签: javascript arrays

请解释为什么函数foo的新实例 obj2 仍然在items数组中有元素?当我打电话给新的foo()时,为什么它没有被覆盖?

var foo = function() {}

foo.prototype = {
    items : [],
  addItem : function()
  {
    this.items.push("item");
  }
}

var obj = new foo();
obj.addItem();

console.log(obj.items.length); //1 as expected

var obj2 = new foo();

console.log(obj2.items.length); // 1, why not 0?????

2 个答案:

答案 0 :(得分:1)

您已将其添加到原型中,这意味着所有实例都会共享它。您希望.flex-services的每个实例都有一个新的items数组。要实现这一点,您需要将其移出Foo并进入函数体。您会将其附加到prototype

this

答案 1 :(得分:0)

由于您对{1}}引用了1个数组,因此它将是所有新对象(obj1和obj2)中的相同数组。

您的items应该是:

foo