| | |
| | | var $ = require('../internals/export'); |
| | | var getBuiltIn = require('../internals/get-built-in'); |
| | | var functionApply = require('../internals/function-apply'); |
| | | var aCallable = require('../internals/a-callable'); |
| | | var anObject = require('../internals/an-object'); |
| | | var fails = require('../internals/fails'); |
| | | |
| | | var nativeApply = getBuiltIn('Reflect', 'apply'); |
| | | var functionApply = Function.apply; |
| | | |
| | | // MS Edge argumentsList argument is optional |
| | | var OPTIONAL_ARGUMENTS_LIST = !fails(function () { |
| | | nativeApply(function () { /* empty */ }); |
| | | // eslint-disable-next-line es-x/no-reflect -- required for testing |
| | | Reflect.apply(function () { /* empty */ }); |
| | | }); |
| | | |
| | | // `Reflect.apply` method |
| | | // https://tc39.es/ecma262/#sec-reflect.apply |
| | | $({ target: 'Reflect', stat: true, forced: OPTIONAL_ARGUMENTS_LIST }, { |
| | | apply: function apply(target, thisArgument, argumentsList) { |
| | | aCallable(target); |
| | | anObject(argumentsList); |
| | | return nativeApply |
| | | ? nativeApply(target, thisArgument, argumentsList) |
| | | : functionApply.call(target, thisArgument, argumentsList); |
| | | return functionApply(aCallable(target), thisArgument, anObject(argumentsList)); |
| | | } |
| | | }); |