我在Javascript中有这段代码:
function Camada(nome) {
Camada.prototype.nome = nome;
Camada.prototype.desenhar = function () {
};
};
var camadas = [];
for (var i = 0; i < 10; i++) {
var camada = new Camada('nome' + i);
camadas[i] = camada;
}
for (var i = 0; i < 10; i++) {
console.log(camadas[i]);
}
但这总是打印10次最后一个对象Camada,问题看起来像camadas保持对var camada的引用;
如何使用for循环解决此类问题?
答案 0 :(得分:3)
您的代码问题在于您在构造函数中分配给Camada.prototype
。请改用this
。
不同之处在于,分配给原型会使这个属性在所有Camada实例中都很常见。分配给this
将使其成为给定实例的属性(这正是您想要的)。
在this StackOverflow thread中很好地解释了prototype
和this
之间的区别。
试试这个:
function Camada(nome) {
// Since you're using Camada as a constructor, you can use 'this'
// and assign new objects properties to it.
this.nome = nome;
this.desenhar = function () {};
};
var camadas = [];
for (var i = 0; i < 10; i++) {
var camada = new Camada('nome' + i);
camadas[i] = camada;
}
for (var i = 0; i < 10; i++) {
console.log(camadas[i].nome);
}
答案 1 :(得分:1)
因为在Camada的构造函数中,您正在更改原型。 原型就像这个类,并且由所有Camadas共享。
这应该是你想要的:
function Camada(nome) {
this.nome = nome;
this.desenhar = function () { };
};
答案 2 :(得分:0)
您正在将 nome 传递给原型。这意味着每次调用构造函数时,它都会覆盖此属性,并影响所有实例。
不要将 nome 值传递给原型。
答案 3 :(得分:0)
在构造函数中,您要将param分配给class属性:
function Camada(nome) {
this.nome = nome;
};