我有以下代码
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
时,我实际上从未创建过新对象答案 0 :(得分:0)
嗯,Object.create
的第一个参数是你想成为新创建对象原型的对象。见MDN。本质上,它将是一个新对象,但它看起来像旧对象,因为它通过它的原型继承旧对象的所有属性。尝试传递ViewModel.prototype
作为第一个参数,将旧对象作为第二个参数。扩展路由不会完全成功,因为新对象将具有旧对象的所有属性,除了它不会从ViewModel.prototype
继承,因此不会有更新或任何其他原型方法/属性