Pregunta

Acabo de descubrir que los objetos de la manera difícil se transmiten por referencia en JavaScript, por ejemplo:

for(var layer = 0; layer < hudLayers['layers'].length; layer++){

    // Store the to-be-calculated values in this object
    var tempValues = hudLayers['layers'][layer];

    tempValues['name'] = 'test';
}

Esto cambiará el valor en TempValues y Hudlayers. (Parece algo obvio, pero un post sin un código parece tan desnudo).

¿Hay una manera rápida alrededor de esto?

¿Fue útil?

Solución

Este no es un ejemplo de paso por referencia (no está pasando ningún parámetro). Sin embargo, eres correcto;Asignar un objeto no hará una copia profunda.

Puede hacer una copia profunda de un objeto como este:

function deepCopy(obj) {
    if (typeof obj !== "object") return obj;
    if (obj.constructor === RegExp) return obj;

    var retVal = new obj.constructor();
    for (var key in obj) {
        if (!obj.hasOwnProperty(key)) continue;
        retVal[key] = deepCopy(obj[key]);
    }
    return retVal;
}

Tenga en cuenta que si el constructor de un objeto tiene algún efecto secundario, este código los activará.

Otros consejos

No hay pase por referencia en JavaScript.Se accede a los objetos a través de referencias y esas referencias se asignan o pasan pasadas por valor, al igual que en Java

Hacer una copia profunda de un objeto es tan simple como objCopy = obj.toSource();.

.ToSource en MDN

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top