2011-04-17 8 views
8

Cuando almaceno un objeto como {a: 1, b: 2 } en los datos de jQuery, ¿copia el objeto o guarda una referencia al mismo?jquery .data() método

Tengo un gran objeto y quiero diferentes elementos para almacenar diferentes referencias de diferentes puntos para el mismo objeto, y no quiero que se copien.

Como

var obj = { 
    a: { 
     one: 1, two: 2 
    }, 
    b: { 
     apple: 'yummy', banana: 'ehh' 
    } 
    c: { 
     d: { 
      'jQuery': jQuery 
     } 
     e: ['You get the point'] 
    } 
}; 

$('div').data('info', obj.b); 
$('#JQ').data('jq_reference', obj.c.d.jQuery); 

Respuesta

5

Según my jsfiddle test, almacena una referencia.

Si hago esto:

$('div').data('info', obj.b); 
obj.b.apple = 'bleuch'; 
alert($('div').data('info').apple); 

Alerta "bleuch", lo que demuestra que una referencia al objeto original se está almacenando.

1

Se ahorrará una referencia a él.

Los objetos Javascript nunca se copian, a menos que haga una copia explícitamente.

+0

Creo que el objetivo de su pregunta era preguntar si jQuery hace una copia tan explícita – Alnitak

+0

jQuery nunca copia cosas a menos que usted lo indique. – SLaks

+3

seguro, pero ¿dónde está eso documentado? – Alnitak

0

De http://api.jquery.com/data/

"Los atributos Data- se tira en la primera vez que se accede a la propiedad de datos y luego ya no se accede o mutado (valores de todos los datos son luego almacenados internamente en jQuery)."