次のコードがあります
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 を呼び出すときに、実際に新しいオブジェクトを作成することはありません。