Javascript:在循环内创建一个对象数组

时间:2014-07-08 16:18:01

标签: javascript arrays

我在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循环解决此类问题?

4 个答案:

答案 0 :(得分:3)

您的代码问题在于您在构造函数中分配给Camada.prototype。请改用this

不同之处在于,分配给原型会使这个属性在所有Camada实例中都很常见。分配给this将使其成为给定实例的属性(这正是您想要的)。

this StackOverflow thread中很好地解释了prototypethis之间的区别。

试试这个:

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;
};