clones
v1.2.0
Published
should deep clone everything even global objects, functions, circularities, ...
Downloads
68,364
Maintainers
Readme
clones
should deep clone everything even global objects, functions, circularities, ...
Companion for safer-eval.
Runs on node and in modern browsers:
| | Versions | | --- | --- | | node | ~~0.12~~, 4, 6, 8, 10, 11 | | Chrome | 55, 56, 71 | | Firefox | 45, 51, 64 | | Edge | 14, 16 | | IE | ~~11~~ | | Safari | 10 | | iOS Safari | 10 |
Installation
npm i -S clonesUsage
const clones = require('clones')
const dest = clones(source, [bind])Parameters
Parameters
source: Object, clone source
bind: Object, bind functions to this context
Returns: Any, deep clone of source
Example:
const clones = require('clones')
var source = {
obj: {a: {b: 1}},
arr: [true, 1, {c: 'dee'}],
fn: function () { return this.number + 12 }
}
// adding circularity
source.obj.a.e = source.obj.a
// do the cloning (with binding a context)
var dest = clones(source, {number: 30})
// => { obj: { a: { b: 1, e: [Circular] }, d: 2017-02-17T21:57:44.576Z },
// arr: [ true, 1, { c: 'dee' } ],
// fn: [Function: fn] }
// checks
assert.ok(dest !== source) // has different reference
assert.ok(dest.obj !== source.obj) // has different reference
assert.ok(dest.obj.a !== source.obj.a) // has different reference
assert.ok(dest.obj.a.e !== source.obj.a.e) // different references for circularities
assert.equal(dest.obj.d.toISOString(),
source.obj.d.toISOString()) // has same content
assert.ok(dest.fn !== source.fn) // has different function reference
source.fn = source.fn.bind({number: 29}) // bind `this` for `source`
assert.equal(dest.fn(), source.fn() + 1) // returning the same resultClone prototypes or classes
const clones = require('clones')
// clone built in `Array`
const C = clones.classes(Array)
let c = new C(1,2,3)
// => [1, 2, 3]
c.reverse()
// => [3, 2, 1]