How bind works?

by kuyabiye

JavaScript

Function.prototype.binded = function (oThis) {
    debugger;
    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 () {
            debugger;
          return fToBind.apply(this instanceof fNOP && oThis
                 ? this
                 : oThis,
                 aArgs.concat(Array.prototype.slice.call(arguments)));
        };

    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();

    return fBound;
  };
var sum = function(x,y) {
    return x + y; 
}

//var plus = sum.binded(null, 1, 2);
var plus = sum.binded(null, 1);

console.log(plus);

console.log(plus(5));