Причина использования 'instanceof function () {}'?

В Центре разработчиков Mozilla есть страница о функции Function.prototype.bind , которая предоставляет функцию совместимости для браузеров, которые не поддерживают эту функцию.

Однако, анализируя этот код совместимости, я не могу понять, почему они используют instanceof nop . nop имеет значение function () {} .Какой части спецификации ECMA на bind это соответствует? И какие переменные являются экземпляром function () {} ?

Следующее возвращает false , поэтому я не совсем понимаю, для чего он используется. Что возвращает истину при выполнении instanceof function () {} проверки?

(function() {}) instanceof (function() {}) // false

Код выглядит следующим образом:

Function.prototype.bind = function( obj ) {
    if(typeof this !== 'function')
      throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');

    var slice = [].slice,
        args = slice.call(arguments, 1), 
        self = this, 
        nop = function () {}, 
        bound = function () {
          return self.apply( this instanceof nop ? this : ( obj || {} ), 
                              args.concat( slice.call(arguments) ) );    
        };

    bound.prototype = this.prototype;

    return bound;
};

15
задан Tom van der Woerdt 28 December 2011 в 15:40
поделиться