code: function clone(obj, custom_method, extra_args, wm) {
  
  	if (custom_method instanceof WeakMap) {
  		wm = custom_method;
  		custom_method = null;
  	} else if (extra_args instanceof WeakMap) {
  		wm = extra_args;
  		extra_args = null;
  	}
  
  	if (!wm) {
  		wm = new WeakMap();
  		wm.source = obj;
  		wm.custom_method = custom_method;
  		wm.extra_args = extra_args;
  	} else if (wm.has(obj)) {
  		return wm.get(obj);
  	}
  
  	if (custom_method) {
  		extra_args = [wm].concat(extra_args);
  	}
  
  	return real_clone({'_': obj}, custom_method, extra_args, wm)['_'];
  }
docs: Deep clone an object
  
  @author   Jelle De Loecker   <jelle@develry.be>
  @since    1.0.0
  @version  1.0.10
  
  @param    {Object}   obj
  @param    {String}   custom_method   Custom method to use if available
  @param    {Array}    extra_args      Extra arguments for the custom method
  @param    {WeakMap}  wm
  
  @return   {Object}