Projekt

Obecné

Profil

Stáhnout (903 Bajtů) Statistiky
| Větev: | Revize:
1
'use strict';
2
var aFunction = require('./_a-function');
3
var isObject = require('./_is-object');
4
var invoke = require('./_invoke');
5
var arraySlice = [].slice;
6
var factories = {};
7

    
8
var construct = function (F, len, args) {
9
  if (!(len in factories)) {
10
    for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';
11
    // eslint-disable-next-line no-new-func
12
    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
13
  } return factories[len](F, args);
14
};
15

    
16
module.exports = Function.bind || function bind(that /* , ...args */) {
17
  var fn = aFunction(this);
18
  var partArgs = arraySlice.call(arguments, 1);
19
  var bound = function (/* args... */) {
20
    var args = partArgs.concat(arraySlice.call(arguments));
21
    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
22
  };
23
  if (isObject(fn.prototype)) bound.prototype = fn.prototype;
24
  return bound;
25
};
(15-15/303)