簡體   English   中英

Javascript Object。創建對對象的復制引用

[英]Javascript Object.Create copying reference to object

我有以下代碼

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時,我從來沒有真正制作過新對象

好吧, Object.create的第一個參數是您想要成為新創建對象原型的對象。 參見MDN 從本質上講,它將是一個新對象,但看起來卻像舊對象,因為它通過原型繼承了舊對象的所有屬性。 嘗試將ViewModel.prototype作為第一個參數傳遞,並將舊對象作為第二個參數傳遞。 擴展路由不會完全成功,因為新對象將具有舊對象的所有屬性,但它不會繼承自ViewModel.prototype ,因此不會具有更新或任何其他原型方法/屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM