В Центре разработчиков Mozilla есть страница о функции Function.prototype.bind
. и предоставляет функцию совместимости для браузеров, которые не поддерживают эту функцию.
Однако при анализе этого кода совместимости я не могу понять, почему они используют instanceof nop
. nop
был установлен на function() {}
. Какой части спецификации ECMA по bind
это соответствует? И какие переменные являются экземпляром function() {}
?
Следующее возвращает false
, поэтому я не совсем понимаю, для чего оно используется. Какие вещи возвращают true при выполнении проверки 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;
};