En Mozilla Developer Center, hay una página sobre la función Function.prototype.bind
y proporciona una función de compatibilidad para navegadores que no admiten esta función.Motivo detrás del uso de 'instanceof function() {}'?
Sin embargo, al analizar este código de compatibilidad no puedo averiguar por qué usan instanceof nop
. nop
se ha establecido en function() {}
. ¿Con qué parte de la especificación ECMA en bind
corresponde esto? ¿Y qué variables son una instancia de function() {}
?
Lo siguiente devuelve false
, por lo que no sé para qué se utiliza. ¿Qué cosas devuelven la verdad al hacer un cheque instanceof function() {}
?
(function() {}) instanceof (function() {}) // false
El código es el siguiente:
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;
};