我在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将使其仅成为给定实例的属性(这就是您想要的)。

prototypethis之间的差异在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);
}

09-26 23:20