Я не могу понять, как работает эта функция javascript

Я читал определение функции для bind , но не могу на 100% понять написанный код:

if (!Function.prototype.bind) {
    Function.prototype.bind = function(oThis) {
        if (typeof this !== "function") {
            // closest thing possible to the ECMAScript 5 internal IsCallable function
            throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
        }

        var aArgs = Array.prototype.slice.call(arguments, 1),
            fToBind = this,
            fNOP = function() {},
            fBound = function() {
                return fToBind.apply(this instanceof fNOP
                                       ? this 
                                       : oThis || window,
                                     aArgs.concat(Array.prototype.slice.call(arguments)));
            };

        fNOP.prototype = this.prototype;
        fBound.prototype = new fNOP();

        return fBound;
    };
}

В частности, мне не понятна цель fNOP , и я не понимаю, зачем нужно устанавливать прототип fBound . Я также завис на Часть fToBind.apply (я не могу понять, что это означает в данном контексте).

Может ли кто-нибудь объяснить, что здесь происходит?

27
задан Davis Dimitriov 10 January 2012 в 20:42
поделиться