Sha256: 8752a57f05844ec002c9b603529b65b35070169448adaba681150f7c97f7689d

Contents?: true

Size: 1.43 KB

Versions: 167

Compression:

Stored size: 1.43 KB

Contents

'use strict';

/* eslint no-invalid-this: 1 */

var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
var slice = Array.prototype.slice;
var toStr = Object.prototype.toString;
var funcType = '[object Function]';

module.exports = function bind(that) {
    var target = this;
    if (typeof target !== 'function' || toStr.call(target) !== funcType) {
        throw new TypeError(ERROR_MESSAGE + target);
    }
    var args = slice.call(arguments, 1);

    var bound;
    var binder = function () {
        if (this instanceof bound) {
            var result = target.apply(
                this,
                args.concat(slice.call(arguments))
            );
            if (Object(result) === result) {
                return result;
            }
            return this;
        } else {
            return target.apply(
                that,
                args.concat(slice.call(arguments))
            );
        }
    };

    var boundLength = Math.max(0, target.length - args.length);
    var boundArgs = [];
    for (var i = 0; i < boundLength; i++) {
        boundArgs.push('$' + i);
    }

    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);

    if (target.prototype) {
        var Empty = function Empty() {};
        Empty.prototype = target.prototype;
        bound.prototype = new Empty();
        Empty.prototype = null;
    }

    return bound;
};

Version data entries

167 entries across 139 versions & 18 rubygems

Version Path
immosquare-cleaner-0.1.60 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.59 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.58 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.57 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.56 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.55 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.54 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.53 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.52 node_modules/has/node_modules/function-bind/implementation.js
trusty-cms-6.3.1 node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.51 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.50 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.49 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.48 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.47 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.46 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.45 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.44 node_modules/has/node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.44 node_modules/function-bind/implementation.js
immosquare-cleaner-0.1.43 node_modules/has/node_modules/function-bind/implementation.js