2012-06-16 9 views
5

かなりストレートな質問ですが、Google検索ではまだ何も表示されていません。CoffeeScriptでオブジェクトのインスタンスを複製/コピーするにはどうすればよいですか?

Coffeescriptでオブジェクトのインスタンスをコピー/複製/複製するにはどうすればよいですか?私は常にコピーされた値を持つ新しいインスタンスを返すclone()メソッドを作成することができますが、それはエラーを起こしやすい方法のようです。

CoffeeScriptはより簡単なソリューションを提供しますか?

答えて

8

これは機能する場合があります。採用

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 

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

+0

それは '新しいobj.constructor()'でなければなりません。さもなければ、あなたは "テンポをオブジェクトに変換できません。" – dennis

+0

@dennis Thanks dennis。私はコードを更新しました。 –

5

ヒントのラリーバトルのおかげ:

jQuery.extendを使用してのジョンResig氏のソリューションは、見事に動作します!

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

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

さらに詳しい情報はjQuery documentationにあります。 CoffeeScriptのクックブックから

+0

これを行うと、新しいオブジェクトのプロパティの変更は古いものから変更されるので、これはどのように「コピー」ですか? –

+0

ええと、それは正しく聞こえません:)プリミティブなプロパティや複雑なプロパティを編集していますか?ネストされたプロパティを編集する場合は、詳細コピーを使用する必要があります。 John ResigのJavaScriptに関する元の答えは次のとおりです:http://stackoverflow.com/a/122704/746890(JohnはjQueryの作成者でした) –

+1

私はそれを分類したと思います。私はKO VMとしてJSオブジェクトをラップするKnockoutJSだと思います。 –

関連する問題