Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Tentativa mal sucedida ao tentar criar Array de Elementos(Objetos)

Olá a todos, seguindo o curso, achei interessante eu preparar um array de elementos tds no ultimo modulo, para poder adicionar os placares e posteriormente aplicar 1 a 1 o text().

O código é o seguinte:

function pushElementsToArr(objeto, quantidade){
    var array = [];
    for (var i = 0; i < quantidade; i++) {
        array.push(objeto);
    }
    return array;
}

Quando eu utilizo a função:

function mountPlacarLine(){
    var arrTds = pushElementsToArr($("<td>"), 3);
    arrTds[0].text(1);
    arrTds[1].text(2);
    arrTds[2].text(3);
    return arrTds;
}

Quando eu chamo a função pelo console, eu consigo recuperar o array e saber o que está dentro dos elementos. Só que aí vem minha frustração, quando eu vejo o conteúdo innerHTML de todos os elementos, os três estão com o valor "3".

Por quê todos os elementos estão herdando esse valor, se eu setei somente para o ultimo?

Agradeceria quem puder me ajudar, para quem puder apontar onde estou errando.

Abraço a todos!

1 resposta
solução!

Oi Alessandro,

Isso acontece porque em Javascript nós temos referências para objetos. Quando você faz array.push(objeto); você está colocando a referência para o objeto e não o objeto em si. Dessa forma, como você faz arrTds[2].text(3); por último, é esse valor que fica no seu único objeto (que tem 3 referências).

No jQuery nós temos o método .clone(), que clona um objeto. Uma solução seria adaptar a linha interna do for para array.push(objeto.clone());.