我在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]);
}
但这总是打印最后一个对象Camada的10倍,问题似乎是camadas保留了对var camada的引用。
如何使用for循环解决此类问题?
最佳答案
代码的问题在于您要在构造函数中分配给Camada.prototype
。请改用this
。
不同之处在于,分配给原型将使此属性在Camada的所有实例之间通用。分配给this
将使其仅成为给定实例的属性(这就是您想要的)。prototype
和this
之间的差异在this StackOverflow thread中得到了很好的解释。
尝试这个:
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);
}