0

我有以下代码

ViewModel.prototype.update = function(initial) {
  var ittr, key, val, x;
  for (key in initial) {
    val = initial[key];
    if ($.isArray(val) && $.isArray(this[key]())) {
      ittr = 0;
      while (ittr < val.length) {
        if (this[key].length > ittr) {
          if ((this[key][ittr - 1]) instanceof ViewModel) {
              x = Object.create(this[key][ittr - 1]);
              x.update(val[ittr]);
              this[key].push(x);
          }
        }
      }
    }
  }
}

我有从 ViewModel 继承的对象,它们都具有更新功能。我有一个数组,我正在使用来自 json 对象(初始)的新内容进行更新。有时 Json 对象比我正在更新的现有数组长,所以我想添加相同类型的对象。我正在使用 Object.create(this[key][ittr -1]) 指向数组中的最后一个对象,并尝试从中实例化一个新对象。问题是,每次迭代,它都不会创建新对象,而只是旧对象的副本。知道我怎么能阻止它吗?

我也试过jquery

new $.extend({},this[key][ittr - 1])

我试过把 x 变成一个数组

x[ittr] = Object.create(this[key][ittr - 1]);
x[ittr].update(val[ittr]);
this[key].push(x[ittr]);

每当我调用 x.update 时,它​​都会更改数组中已设置为 x 的每个值。所以当我调用 Object.create 时,我从来没有真正创建一个新对象

4

1 回答 1

0

嗯,第一个参数Object.create是你想成为新创建对象的原型的对象。见MDN。本质上,它将是一个新对象,但它看起来像旧对象,因为它通过原型继承了旧对象的所有属性。尝试ViewModel.prototype作为第一个参数传递,将旧对象作为第二个参数传递。扩展路线不会完全成功,因为新对象将具有旧对象的所有属性,除了它不会继承自ViewModel.prototype,因此不会有更新或任何其他原型方法/属性。

于 2012-10-17T22:22:05.970 回答