値をディープコピーします
次のルールで複製されます
- undefined,null,プリミティブの真偽値・数字・文字列は値そのものを返す
- newで作成された真偽値・数字・文字列は同じコンストラクタのオブジェクトで返す
- 日付と正規表現は同じ値を持つ引数に持つコンストラクタのオブジェクトで返す
- エラーはmessageプロパティを引数に持つコンストラクタのオブジェクトで返す
- 配列は各値毎にルールを適用した新しい配列を返す
- オブジェクトはプロパティ毎ににルールを適用したもので返す
- 列挙されないプロパティもその属性を保持したまま複製する
- プロトタイプは複製元と同じ参照先が設定される
- 関数は複製元と同じ参照が設定される
- 循環参照が存在する場合は同じパスの参照先のオブジェクトへの参照が設定される
var clone = require('cocotte-clone');
var original = {
a: 1,
b: 'foo',
c: new Date(),
d: [1, 2, {x: 1}]
};
var cloned = clone(original);
オブジェクトをマージします
マージされた配列やオブジェクトの要素も全てディープコピーされています
第2引数以降のオブジェクトは、列挙可能なプロパティのみがマージの対象になります
マージ元のプロパティが列挙可能である必要はありません
マージ元のプロパティが書込み不可の場合はマージされません
var obj1 = {
a: 1,
b: {
c: 2,
d: 3
}
};
var obj2 = {
a: 4,
b: {
c: 5
}
};
var obj3 = {
a: 4,
b: {
c: 5,
d: 3
}
};
assert.deepEqual(clone(obj1, obj2), obj3); // pass
ディープコピー後に配列として返します
連結の際はArray.concatと同じ動作をします
var cloned = clone(1, [2, 3], [4, 5]); // [1, 2, 3, 4, 5]