2012-06-16 78 views
5

相當直接的問題,但谷歌還沒有發現任何東西。如何在CoffeeScript中克隆/複製對象的實例?

如何複製/複製/複製Coffeescript中的對象實例?我總是可以創建一個clone()方法,該方法返回具有複製值的新實例,但這似乎是一種容易出錯的方式。

CoffeeScript是否提供更簡單的解決方案?

回答

5

感謝拉里戰提示:

使用jQuery.extend的約翰Resig的解決方案出色的作品

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 

從採納!

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

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

更多信息可在jQuery documentation中找到。

+0

當我這樣做時,更改新對象中的屬性最終會改變舊對象中的屬性,那麼這是如何「複製」? –

+0

嗯,這聽起來不對:)你在編輯原始屬性還是複雜屬性?如果您正在編輯嵌套屬性,則可能需要使用深層副本。這裏是John Resig對JavaScript的原始答案:http://stackoverflow.com/a/122704/746890(John是jQuery的創建者)。 –

+1

我想我對它進行了排序。我認爲這是KnockoutJS將我的JS對象包裝爲KO虛擬機。 –