【问题标题】:Javascript Object.Create copying reference to objectJavascript Object.Create 对对象的复制引用
【发布时间】:2023-04-08 13:01:02
【问题描述】:

我有以下代码

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 时,我从来没有真正创建一个新对象

【问题讨论】:

    标签: javascript object new-operator object-create


    【解决方案1】:

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

    【讨论】:

    • 没有Object.prototype.create
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2020-03-20
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    相关资源
    最近更新 更多