В Центре разработчиков 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;
};