copy.js 475 Bytes
'use strict';

var mixin         = require('../../object/mixin')
  , validFunction = require('../valid-function')

  , re = /^\s*function\s*([\0-'\)-\uffff]+)*\s*\(([\0-\(\*-\uffff]*)\)\s*\{/;

module.exports = function () {
	var match = String(validFunction(this)).match(re), fn;

	fn = new Function('fn', 'return function ' + match[1].trim() + '(' +
		match[2] + ') { return fn.apply(this, arguments); };')(this);
	try { mixin(fn, this); } catch (ignore) {}
	return fn;
};