2012-06-16 11 views
5

Ziemlich einfache Frage, aber Googling hat noch nichts gefunden.Wie kopiere/kopiere ich eine Instanz eines Objekts in CoffeeScript?

Wie kopiere/klone/dupliziere ich eine Instanz eines Objekts in Coffeescript? Ich könnte immer nur eine clone() Methode erstellen, die eine neue Instanz mit kopierten Werten zurückgibt, aber das scheint eine fehleranfällige Methode zu sein.

Bietet CoffeeScript eine einfachere Lösung?

Antwort

8

Dies könnte funktionieren.

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 

Angenommen von: What is the most efficient way to deep clone an object in JavaScript?

+0

Es sollte 'neuer obj.constructor()' sein. Andernfalls erhältst du ein "Kann Temp nicht in Objekt konvertieren". – dennis

+0

@dennis Danke dennis. Ich habe den Code aktualisiert. –

5

Dank Larry Kampf für den Hinweis:

John Resig Lösung mit jQuery.extend brillant funktioniert!

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

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

Weitere Informationen finden Sie in der jQuery documentation.

+0

Wenn ich das tue, ändert sich das Ändern einer Eigenschaft in dem neuen Objekt in der alten, also wie ist das eine "Kopie"? –

+0

Hmm, das klingt nicht richtig :) Bearbeiten Sie primitive Eigenschaften oder komplexe Eigenschaften? Möglicherweise müssen Sie die Tiefenkopie verwenden, wenn Sie verschachtelte Eigenschaften bearbeiten. Hier ist John Resigs ursprüngliche Antwort für JavaScript: http://Stackoverflow.com/a/122704/746890 (John war der Schöpfer von jQuery). –

+1

Ich glaube ich habe es sortiert. Ich glaube, es war KnockoutJS, das mein JS-Objekt als KO-VM umschließt. –

Verwandte Themen