1

I read the polyfill about Function.prototype.bind() in [Mozilla] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Polyfill).

Below is the code:

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)));
        };

    if (this.prototype) {
      // native functions don't have a prototype
      fNOP.prototype = this.prototype; 
    }
    fBound.prototype = new fNOP();

    return fBound;
  };
}

I can't understand why should we use this instanceof fNOP? this :othis

because after executing fBound.prototype = new fNOP();it must be true.

yifei.pan
  • 11
  • 1
  • 3
    The answer seems to be [here](http://stackoverflow.com/a/5774147/2940792). Still a duplicate, but of a different question. – hon2a Dec 09 '15 at 12:00
  • @T.J. Crowder Thanks a lot,I will search much carefully next time~~ – yifei.pan Dec 10 '15 at 02:05
  • 1
    @JamesThorpe: Done (reopening). I can't now vote to close as a dupe of this: http://stackoverflow.com/a/5774147/2940792 – T.J. Crowder Dec 10 '15 at 07:45

0 Answers0