2012-06-16 12 views
5

Pregunta bastante directa pero Google no ha encontrado nada todavía.¿Cómo puedo clonar/copiar una instancia de un objeto en CoffeeScript?

¿Cómo copio/clono/duplico una instancia de un objeto en Coffeescript? Siempre podría simplemente crear un método clone() que devuelva una nueva instancia con valores copiados, pero parece una forma propensa a errores para hacerlo.

¿CoffeeScript ofrece una solución más simple?

Respuesta

8

Esto podría funcionar.

clone = (obj) -> 
    return obj if obj is null or typeof (obj) isnt "object" 
    temp = new obj.constructor() 
    for key of obj 
    temp[key] = clone(obj[key]) 
    temp 

adoptado de: What is the most efficient way to deep clone an object in JavaScript?

+0

Debe ser 'nueva obj.constructor()'. De lo contrario, obtendrás un "No se puede convertir 'temperatura' para objetar". – dennis

+0

@dennis Gracias, Dennis. Actualicé el código. –

5

Gracias a Larry batalla por la pista:

solución de utilizar jQuery.extend de John Resig funciona muy bien!

// Shallow copy 
newObject = $.extend({}, oldObject); 

// Deep copy 
newObject = $.extend(true, {}, oldObject); 

Más información se puede encontrar en jQuery documentation.

+0

Cuando hago esto, cambiar una propiedad en el nuevo objeto termina cambiando en el anterior, entonces, ¿cómo es esto una "copia"? –

+0

Hmm, eso no suena bien :) ¿Está editando propiedades primitivas o propiedades complejas? Es posible que necesite utilizar la copia profunda si está editando propiedades anidadas. Aquí está la respuesta original de John Resig para JavaScript: http://stackoverflow.com/a/122704/746890 (John fue el creador de jQuery). –

+1

Creo que lo ordené. Creo que fue KnockoutJS envolviendo mi objeto JS como KO VM. –

Cuestiones relacionadas