39 lines
859 B
JavaScript
39 lines
859 B
JavaScript
|
/**
|
||
|
Deep clone a simple object.
|
||
|
@private
|
||
|
*/
|
||
|
'use strict';
|
||
|
|
||
|
function doop(o) {
|
||
|
var clone;
|
||
|
var props;
|
||
|
var i;
|
||
|
var l;
|
||
|
|
||
|
if (o instanceof Object && o.constructor !== Function) {
|
||
|
if ( Array.isArray(o) ) {
|
||
|
clone = [];
|
||
|
for (i = 0, l = o.length; i < l; i++) {
|
||
|
clone[i] = (o[i] instanceof Object) ? doop(o[i]) : o[i];
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
clone = Object.create( Object.getPrototypeOf(o) );
|
||
|
props = Object.getOwnPropertyNames(o);
|
||
|
for (i = 0, l = props.length; i < l; i++) {
|
||
|
Object.defineProperty(clone, props[i],
|
||
|
Object.getOwnPropertyDescriptor(o, props[i]));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return clone;
|
||
|
}
|
||
|
|
||
|
return o;
|
||
|
}
|
||
|
|
||
|
// for backwards compatibility
|
||
|
doop.doop = doop;
|
||
|
|
||
|
module.exports = doop;
|