0.3.1 • Published 10 years ago

cocotte-clone v0.3.1

Weekly downloads
2
License
MIT
Repository
github
Last release
10 years ago

cocotte-clone

値をディープコピーします
次のルールで複製されます

  • 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]
0.3.1

10 years ago

0.3.0

10 years ago

0.2.0

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago