var $ = require('../internals/export');
var global = require('../internals/global');
+var apply = require('../internals/function-apply');
+var isCallable = require('../internals/is-callable');
var userAgent = require('../internals/engine-user-agent');
+var arraySlice = require('../internals/array-slice');
-var slice = [].slice;
var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
+var Function = global.Function;
var wrap = function (scheduler) {
return function (handler, timeout /* , ...arguments */) {
var boundArgs = arguments.length > 2;
- var args = boundArgs ? slice.call(arguments, 2) : undefined;
+ var args = boundArgs ? arraySlice(arguments, 2) : undefined;
return scheduler(boundArgs ? function () {
- // eslint-disable-next-line no-new-func -- spec requirement
- (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);
+ apply(isCallable(handler) ? handler : Function(handler), this, args);
} : handler, timeout);
};
};