[英]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.