Spaces:
Sleeping
Sleeping
; | |
var bind = require('function-bind'); | |
var GetIntrinsic = require('get-intrinsic'); | |
var setFunctionLength = require('set-function-length'); | |
var $TypeError = GetIntrinsic('%TypeError%'); | |
var $apply = GetIntrinsic('%Function.prototype.apply%'); | |
var $call = GetIntrinsic('%Function.prototype.call%'); | |
var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); | |
var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); | |
var $max = GetIntrinsic('%Math.max%'); | |
if ($defineProperty) { | |
try { | |
$defineProperty({}, 'a', { value: 1 }); | |
} catch (e) { | |
// IE 8 has a broken defineProperty | |
$defineProperty = null; | |
} | |
} | |
module.exports = function callBind(originalFunction) { | |
if (typeof originalFunction !== 'function') { | |
throw new $TypeError('a function is required'); | |
} | |
var func = $reflectApply(bind, $call, arguments); | |
return setFunctionLength( | |
func, | |
1 + $max(0, originalFunction.length - (arguments.length - 1)), | |
true | |
); | |
}; | |
var applyBind = function applyBind() { | |
return $reflectApply(bind, $apply, arguments); | |
}; | |
if ($defineProperty) { | |
$defineProperty(module.exports, 'apply', { value: applyBind }); | |
} else { | |
module.exports.apply = applyBind; | |
} | |