JavaScript function.prototype.bind polyfill

2.7k views Asked by At

Why do we need to use instanceOf in here and in which case the result will be true ?

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,
                 aArgs.concat(Array.prototype.slice.call(arguments)));

// Why do we need to use instanceOf in here };

    if (this.prototype) {
      // Function.prototype doesn't have a prototype property
      fNOP.prototype = this.prototype; 
    }
    fBound.prototype = new fNOP();

    return fBound;
  };
}

//which case the result will be true ?

1

There are 1 answers

0
Job On

I think this is a duplicate of the question below, except that the variables were named slightly differently back when it was asked in 2011, so it's easy to not notice it:

mozilla's bind function question

See that question for a full explanation (and upvote the answer if you agree it is the answer to your question), but the key point is this:

Its allows you to call the bound function as a constructor without being bound to the original object. In other words the "bound" function will still work just like the original, unbound version if you call it with new.