has-working-bind-x
Version:
Indicates if the engine has a working bind function.
60 lines (50 loc) • 1.33 kB
JavaScript
import noop from 'noop-x';
var bind = noop.bind;
var test1 = function test1() {
var a1 = null;
var a2 = null;
var context = null;
var testThis = [];
var test1Fn = function test1Fn(arg1, arg2) {
/* eslint-disable-next-line babel/no-invalid-this */
context = this;
a1 = arg1;
a2 = arg2;
/* eslint-disable-next-line prefer-rest-params */
return arguments;
};
try {
var boundFn = bind.apply(test1Fn, [testThis, 1]);
var args = boundFn(2);
return boundFn.length === 1 && args.length === 2 && a1 === 1 && a2 === 2 && context === testThis;
} catch (e) {
return false;
}
};
var test2 = function test2() {
var a1 = null;
var a2 = null;
var context = null;
var oracle = [1, 2, 3];
var Ctr = function Ctr(arg1, arg2) {
a1 = arg1;
a2 = arg2;
context = this;
return oracle;
};
try {
var BoundFn = bind.apply(Ctr, [null]);
var returned = new BoundFn(1, 2);
return BoundFn.length === Ctr.length && returned === oracle && a1 === 1 && a2 === 2 && context !== oracle;
} catch (e) {
return false;
}
};
/**
* Indicates if the engine has a working bind function.
*
* @type {boolean}
*/
var isWorking = typeof bind === 'function' && test1() && test2();
export default isWorking;
//# sourceMappingURL=has-working-bind-x.esm.js.map