Sobre la carga de la página que estoy creando dos Objetos de Javascript, objDemo1 y objDemo1Backup, donde este último es simplemente una copia exacta de la primera.

por ejemplo,

objDemo1 { 
    sub_1 = { something: 123, somethingElse: 321 },
    sub_2 = { something: 456, somethingElse: 654 }
}

Puedo modificar los valores en sub_ así como agregar o eliminar nuevos sub_‘s, pero el único objeto que me estoy editando es objDemo1. es decir, yo nunca cambio objDemo1Backup

Tengo un botón de reset que cuando hace clic en restablecer objDemo1 volver a lo que era cuando la página se cargó originalmente (es decir,objDemo1 = objDemo1Backup). Aquí es donde tengo el problema..

¿Cómo puedo configurar objDemo1 a objDemo1Backup?

He intentado:

objDemo1 = objDemo1Backup;

y

objDemo1 = null;
var objDemo1 = objDemo1Backup;

…así como variaciones similares, pero nada parece funcionar.
Alguna idea?

  • Nota: puedo confirmar que en el punto cero, objDemo1Backup es exactamente el mismo que cuando lo creé y objDemo1 ha cambiado.
  • Mi código es uno de golpear el «reset» de la funcionalidad, donde he intentado objDemo1 = objDemo1Backup… yo simplemente no puede comprender la sintaxis para reemplazar el objeto.
Voy a asumir que lo que está sucediendo es que, puesto que tanto objDemo1 y objDemo1Backup apuntan al mismo objeto, cuando se cambia uno, ambos son cambiados. Esto puede no parecer intuitivo, pero es la forma en que funciona javascript. Google «javascript clonar el objeto» para más detalles.
Estás jugando con objeto de referencia, no a la clonación. Usted debe clonar el objeto en lugar de asignar el uso de =

OriginalEl autor Adam Tomat | 2012-12-18

2 Comentarios

  1. 7

    En JavaScript los objetos se pasan por referencia y no por valor. Así:

    var objDemo, objDemoBackup;
    objDemo = {
        sub_1: "foo";
    };
    objDemoBackup = objDemo;
    objDemo.sub_2 = "bar";
    console.log(objDemoBackup.sub_2);   //"bar"

    Para obtener una copia, usted debe utilizar una función de copia. JavaScript no tiene de forma nativa, pero aquí es un clone aplicación: ¿Cómo puedo correctamente clonar un objeto de JavaScript?

    var objDemo, objDemoBackup;
    objDemo = {
        sub_1: "foo";
    };
    objDemoBackup = clone(objDemo);
    objDemo.sub_2 = "bar";
    console.log(objDemoBackup.sub_2);   //undefined
    Así que si yo quería restablecer objDemo de nuevo a lo que objDemoBackup fue un punto de clonación yo haría esto: objDemo = clone(objDemoBackup);
    Sí, usted debe clon de nuevo o vas a terminar con una referencia 🙂
    Cosas buenas, utilizando clone() tengo trabajo.

    OriginalEl autor Halcyon

  2. 13

    Estoy usando angularjs y me tomó algún tiempo para averiguar cómo copiar un objeto a otro objeto. Normalmente, usted obtendrá un objeto clonar llamando clon o aquí en angular copia:

    var targetObj = angular.copy(sourceObj);

    Esto le da un nuevo clonado instancia (con una nueva referencia) del objeto de origen. Pero una rápida mirada a la documentación revela el segundo parámetro de copia:

    angular.copy(sourceObj, targetObj)

    De esta manera se puede reemplazar un objeto de destino con los campos y métodos de la fuente y también de mantener el objetivo de los objetos de referencia.

    Exactamente lo que estaba buscando. Yo no sabía angular.copy podría tomar un objeto de destino. Gracias!
    No hay AngularJS etiqueta en esta pregunta.

    OriginalEl autor schmijos

Dejar respuesta

Please enter your comment!
Please enter your name here