我不是js的专家。但最近我开始用原型编写并面对这样的问题。
我有类Test和对象(属性),就像这个类的属性一样。然后我创建具有不同属性的实例集合。不幸的是,我得到了具有相同属性的集合,这些属性与最后的实例属性相同。 我想你看到代码时会更容易理解。
function Test(id) {
this.init(id);
}
Test.prototype = {
attributes : {
id : null,
},
init : function (id) {
this.attributes.id = id;
}
};
var a = [0, 1, 2, 3, 4];
var b = {};
for(var i in a) {
b[i] = new Test(a[i]);
}
console.log(b);
你能解释一下我的原因吗?我该如何避免这种麻烦? 非常感谢
答案 0 :(得分:2)
原型在Test
的每个实例之间共享。因此,一旦在任何实例中设置了它,它也会针对所有其他实例进行更改。
为避免这种情况,您可以将id设为实例本身的属性,而不是原型的属性:
function Test(id) {
this.init(id);
}
Test.prototype = {
init : function (id) {
this.id = id;
}
};
var a = [0, 1, 2, 3, 4];
for(var i in a) {
console.log(new Test(a[i]));
}
通过不将id声明为原型的属性,默认情况下将其视为实例的属性。