Lo siguiente primero registra 0 y luego registra 1 . ¿Cómo almaceno una copia del objeto, en lugar de una referencia a él?
debug.log(vi.details.segment); vi.nextSegment = vi.details; vi.nextSegment.segment++; debug.log(vi.details.segment);Para clonar un objeto en jQuery:
var vi.nextSegment = jQuery.extend({}, vi.details); NOTA: Lo anterior es una copia superficial: cualquier objeto anidado o matriz se copiará por referencia, lo que significa que cualquier cambio que realice en vi.nextSegment.obj[prop] se reflejará en vi.details.obj[prop] . Si desea un objeto completamente nuevo que esté completamente separado del original , deberá hacer una copia profunda (pasar true como el primer parámetro):
var vi.nextSegment = jQuery.extend(true, {}, vi.details);Para leer más sobre extender, vea aquí.
Eche un vistazo a la publicación: ¿Cuál es la forma más eficiente de clonar un objeto javascript?
Según la respuesta de John Resig :
// Shallow copy var newObject = jQuery.extend({}, oldObject); // Deep copy var newObject = jQuery.extend(true, {}, oldObject);Se puede encontrar más información en la documentación de jQuery.
Esto funcionó mejor para mí al clonar un objeto usando jQuery "parseJSON()" y "JSON.stringify()"
$.ajax({ url: 'ajax/test.html', dataType: 'json', success: function(data) { var objY = $.parseJSON(JSON.stringify(data)); var objX = $.parseJSON(JSON.stringify(data)); } });La clonación de objetos de datos en objX y objY son dos objetos diferentes, no tiene que meterse con el problema "por referencia"
¡Gracias!