JSFiddle - React, Tailwind, and code Playground
by xavierm02
JavaScript
( function ( ) {
var valueOf = { }.valueOf;
var hasOwnProperty = { }.hasOwnProperty;
var DOMMimeType = navigator.mimeTypes[ 0 ].constructor;
var cloneNode = Node.prototype.cloneNode;
Object.getOwnPropertyDescriptors = function ( object ) {
var propertiesDescriptor = { };
Object.getOwnPropertyNames( object ).forEach( function ( key ) {
propertiesDescriptor[ key ] = Object.getOwnPropertyDescriptor( object, key );
} );
return propertiesDescriptor;
};
Object.clone = function ( object, deep ) {
if ( deep ) {
return deepClone( object, new WeakMap( ) );
} else {
return shallowClone( object );
}
};
var shallowClone = function ( object ) {
if ( Object( object ) !== object || Object.isFrozen( object ) ) {
return object;
}
if ( object instanceof Node ) {
return cloneNode.call( object, false );
}
return Object.create( Object.getPrototypeOf( object ), Object.getOwnPropertyDescriptors( object ) );
};
var deepClone = function ( object, clones ) {
var clone;
if ( Object( object ) !== object || Object.isFrozen( object ) ) {
return object;
}
if ( object instanceof DOMMimeType ) {// chrome bug http://jsfiddle.net/xavierm02/HpD92/
return object;
}
if ( clones.has( object ) ) {
return clones.get( object );
}
if ( object instanceof Node ) {
if ( object instanceof HTMLDocument ) {
return document.implementation.createHTMLDocument( object.title );
}
clone = cloneNode.call( object, true );
clones.set( object, clone );
return clone;
}
clone = Object.create( Object.getPrototypeOf( object ) );
clones.set( object, clone );
...